2012-04-14 22 views
3

この回答によれば、ビューからモデルを呼び出すのは問題ありません。MVC配線;ビューとモデル

Can I call a Model from a View?

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

コントローラーがModel Factoryをビューに渡しますか? (私はそれが私が間違って理解していない限り、それを行うためには、コントローラを迂回しなければならないことから、この質問の目的を台無しにしてしまうと思いますどの)

それとも

は、ビューはに注入モデル工場を持っているだろうビューがコントローラに渡される前にViewのコンストラクタを使用しますか?

+0

これは抽象度VSに応じて異なります* – Michelle

+0

マッピングを表示するモデルに基づいてビューを作成したときにデータを設定することができるDependency Injectionフレームワークを使用して調べることができます。 (参照:http://en.wikipedia.org/wiki/Dependency_injection)また、実際に使用しているMVCは何ですか? –

+0

@ResistDesign私はMVCフレームワークについて勉強していましたが、コードはあまり見かけませんでしたので、どのように見えるのか疑問に思いました。 – Tek

答えて

2

一見すると、私はそれに問題は見当たりません。のは、選択肢を見てみましょう:

  1. ビューに生のモデルを渡す、型の表面には、一般的なモデルインタフェース

    をオフヒンティング、これはOKに見えるかもしれません。しかし、あなたのモデルが(おそらく$model->getPerson($id)のように)モデル内で一貫していない場合、コントローラモデルとビューを効果的に強く結合しています。

    モデルではモデルを実際に受け入れることができないため、コントローラーからの生のモデルを注入することはあまりにも自由であり、道路の不一致や奇妙なエラーの扉を開く可能性があります。

  2. タイプが通過することができる唯一の正しいモデルでは、所望のモデルクラス

    これは前の溶液からliberalness問題を解決オフヒント、ビューに生モデルを渡します。しかし、今ではそのビューをさらにそのモデルに結合しました。だからそれは良くありません。

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

    これは理想的な解決策ではありません。テストのためにモデルをモックアウトしたり、ビューをモデルに完全に結合したりできないからです。明確なSOLID違反。

したがって、基本的にはモデルの工場に注入されます。これにより、ビューは必要なモデルを決定することができます(したがって、工場から求められます)。これは、モデルを模倣することができます(別の工場を交換することによって)。また、工場が返すものを調整することで、任意のモデルを渡すこともできます。

このように、依存関係は緩やかに結合されています。その代わりに、依存関係は工場に依存しています。

これは私の最初の考えです。私はもっ​​と洗練されたソリューションがあるかどうかをさらに検討する必要がありますが、それがあります。

関連する問題