0

データベース アプリケーション用に独自の PHP MVC を開発しています。これは既に完了していますが、MySQL 処理、入力処理、および表示のすべてを行うモノリシック クラスを使用しています。それはうまく機能しますが、デバッグして変更を加えるのは悪夢です! 私は最近 MVC を発見し、アプリを書き直しているところです。現時点ではすべてが計画段階にあるため、実際に共有するコードはありません。

私がつまずいていることが 1 つあります: コントローラーはモデルを呼び出してユーザー入力に基づいてモデルを変更し、次にビューを呼び出す必要があることがわかりました。ビューは、データを取得するために必要なモデルにアクセスし、それを表示します。ビューがコントローラーとは独立してデータを取得し、コントローラーが仲介者として機能しないようにしたいと思います。モデルからデータを取得してビューに渡すコントローラーの行から始めましたが、ビューが複数のモデルにアクセスする必要があるという問題にすぐに遭遇しました。

私が行き詰まっていることを説明するために、例を示します。


例: モデルの検証に失敗するデータを含むフォームを送信する

フロントコントローラー:

  • 関連するコントローラーをロードし、ProcessForm アクションを呼び出します

コントローラ:

  • Model クラスをインスタンス化し、メソッドを呼び出してデータを読み込んで検証する

モデル:

  • 検証に失敗しました: エラーのリストを生成し、'false' を返します

コントローラ:

  • モデルが「true」を返した場合は、インデックス ページにリダイレクトします
  • 「false」が返されました: ビューを呼び出します

意見:

  • Model クラスをインスタンス化し、データをフェッチする
  • データとエラー メッセージの表示

私の問題は、モデルの独自のインスタンスを持つビューが、モデルのコントローラーのインスタンスで生成されたエラーメッセージを、コントローラーが独自のモデルインスタンスをビューに直接渡すことなく、どのように取得できるかです。最初のインスタンスは、2 番目のインスタンスがメッセージを取得できる場所にメッセージを保存する必要があると思いますか?

最初のインスタンスがエラーをコントローラーに返し、それをモデル自体とは関係なくビューに渡すことができることを認識していますが、それでもビューをコントローラーから独立させたいと考えています。

4

3 に答える 3

2

まず第一に、コントローラーとビューに異なるモデル インスタンスがあってはなりません。それらはすべて同じインスタンスを使用する必要があります。この構造でクラスを分割する方がより実用的です。

ドメイン クラス (モデル)

ドメインクラスは、コンテキストを提供するためにデータを保持しているだけです。たとえば、Personドメイン クラスを持つことができます。

class Person {
    private $name;
    private $age;
    ...
    public function getName()
    public function getAge()
    ...
}

コントローラー

コントローラーは、モデルとビューの間の架け橋です。ビジネス ロジックを含めないでください。そのためのサービスです。

class PersonController
{
    private personService;

    public function list(Bag bag) {
        bag.add('personList', personService.listAll());
        ...
        Give bag of data to the correct view
        ...
    }
}

サービス

サービスは、アプリケーション ロジックを処理します。主に、ドメイン ロジックを含むエンティティとストレージの抽象化の間のやり取りです。

class PersonService {
    public function listAll() {
        ...
        Do the logic to find all persons
        ...
        return $persons;
    }
}

ビュー

ビューは、コントローラーによって与えられたデータを表示するだけです。独自のモデルはありません。


すべての問題が解決するわけではありませんが、少なくとも構造を正しくするための最初の一歩にはなります。

Spring Framework (Java) には、MVC の非常に優れた実装があります。インスピレーションについては、http://static.springsource.org/spring/docs/3.0.x/reference/mvc.htmlを参照してください。

于 2013-04-07T21:12:02.120 に答える