2

私が MVC を理解する時が来たので、それが私がやろうとしていることです。そして、モデルが何をすべきかを理解するのに苦労しています。ウィキペディアによると、モデル:

モデルは、アプリケーション ドメインの動作とデータを管理し、その状態に関する情報の要求に (通常はビューから) 応答し、状態を変更する命令 (通常はコントローラーから) に応答します。イベント駆動型システムでは、情報が変更されたときにモデルがオブザーバー (通常はビュー) に通知し、オブザーバーが反応できるようにします。

そして、CakePHP では、次の非常に単純な方法でモデルをセットアップすることになっています。

<?php

class Posts extends AppModel {
    var $name = 'Posts';
}

?>

たとえば、データベースの最新の 10 件の投稿が必要な場合は、次のようなコントローラーを作成します。

<?php

class PostsController {
    function retrieve_latest($number = 10) {
        $posts = $this->Users->find(array(
                'fields' => '*',
                'order' => 'posts.post_id DESC',
                'limit' => $number,
                'page' => '1',
                'conditions' => array('posts.post_display == 1')
        ));

        $this->set('posts', $posts);
    }
}

?>

そして、この男は私のビューに呼び出された変数を渡し、postsそれに応じてそれをレンダリングします。問題は、私のモデルは他に何もするべきではないということです。なぜなら、これと同じくらい単純な場合、カスタム モデルの意味がまったくないからです。つまり、モデル クラスへの単なる空の拡張です。

4

3 に答える 3

5

この「モデル クラスへの空の拡張機能」は、すでに多くのことを行っています。データベースに接続し、データの取得と保存の細かい処理をすべて実行します。ただし、データベースへの書き込み時に常に適用される検証ルールの保持、フィルターの前後で必要なデータのマッサージ、アプリケーションで必要なその他のカスタムビジネス ロジックなど、さらに多くのことを行う必要があります。モデルは、中央のビジネス データ ロジックを格納するためのものです。したがって、プレゼンテーションや入出力に関連しないものはすべて、本質的にアプリケーションのコア ロジックをモデル化します。基本が簡単にセットアップできるからといって、それ以上のものがないわけではありません。

于 2011-11-14T01:31:30.540 に答える
4

また、モデルはビジネス ロジックをカプセル化し、相互のやり取りを処理します。たとえば、投稿にコメントがある場合、それはモデルで処理されるものです。コントローラーが Post を取得してから、Comments を取得してそれらを組み立てる必要はありません。それは、それが属していないコントローラーのモデル構造を知る責任を負わせます。

実際、モデルにロジックがほとんど含まれていないアプリケーションが多数あります。データ フィールドのみでビジネス ロジックを持たないモデルは、DTO (データ転送オブジェクト) または単なる「オブジェクト」と考えることができます。これは、いかなる種類のビジネス ロジックも「モデル化」しないためです。これは必ずしも悪いことではなく、ニーズによって異なります。多くのアプリケーションは単純なフォーム オーバー データ アプリであり、追加のロジックは必要ありません。

ただし、アプリケーションに特定のテーブル内のデータ以外のロジックがある場合、そのロジックはモデルに含まれます。データをモデル化するだけでなく、ドメインをモデル化します。実際、モデルがデータベースと同じ構造を直接持っていないことは珍しくありません。モデルはオブジェクト指向ですが、データベースはより一般的にリレーショナルです。これら 2 つは常に同じ方法で問題を解決するとは限りません。モデルがテーブルを正確にコピーする必要がある場合は、よりオブジェクト指向の機能を制限します。

つまり、ビジネスの内容を説明するものはすべてモデルに組み込まれます。コントローラーは単なるイベント ハンドラーであり、ユーザー インターフェイスの要求に応答します。コントローラーは通常、手元のアプリケーション用にカスタマイズされますが、モデルはビジネス ロジックのコアを表すため、複数のアプリケーションで再利用できる必要があります。

于 2011-11-14T01:34:06.297 に答える