3

この回答によると、ビューからモデルを呼び出しても問題ないようです。

ビューからモデルを呼び出すことはできますか?

今私の質問は、配線はどのように見えるでしょうか?

コントローラはモデルファクトリをビューに渡しますか?(私が間違っていることを理解していない限り、それを行うにはコントローラーをバイパスする必要があるため、この質問の目的を無効にするだろうと思います)

または

ビューがコントローラーに渡される前に、ビューのコンストラクターにモデルファクトリが挿入されますか?

4

1 に答える 1

2

一見すると、それで問題はありません。代替案を見てみましょう。

  1. 生のモデルをビューに渡し、ジェネリック モデル インターフェイスからヒントを入力します

    表面的には、これで問題ないように見えるかもしれません。ただし、モデルが API で一貫していない場合 ($model->getPerson($id)かなり可能性が高い など)、コントローラー モデルとビューが効果的に緊密に結合されています。

    ビューは実際にはどのモデルも受け入れることができないため、コントローラーから生のモデルを注入することは少し自由すぎるかもしれず、将来的に矛盾や奇妙なエラーへの扉を開くかもしれません.

  2. 生のモデルをビューに渡し、目的のモデル クラスをヒントとして入力します

    これにより、正しいモデルのみを渡すことができるという点で、以前のソリューションの自由度の問題が解決されます。しかし、これでビューをそのモデルにさらに結び付けることができました。だから、それは良くありません。

  3. ビュー内でモデルをインスタンス化します。

    これも理想的なソリューションではありません。テスト用にモデルをモックアウトすることができず、ビューをモデルに完全に結合しているためです。明確な SOLID 違反。

したがって、基本的にはモデルのファクトリを注入する必要があります。これにより、ビューは必要なモデルを決定できます (したがって、ファクトリに要求します)。モデルをモックアウトすることができます (別のファクトリを交換することによって)。また、ファクトリが返すものを調整することで、任意のモデルを渡すこともできます。

したがって、依存関係は疎結合になり、代わりにファクトリに依存します (これは、より良い依存関係です)。

それが私の最初の考えです。よりクリーンなソリューションがあるかどうかを確認するために、さらに考える必要がありますが、そこにあります...

于 2012-04-14T16:19:50.697 に答える