この回答によると、ビューからモデルを呼び出しても問題ないようです。
今私の質問は、配線はどのように見えるでしょうか?
コントローラはモデルファクトリをビューに渡しますか?(私が間違っていることを理解していない限り、それを行うにはコントローラーをバイパスする必要があるため、この質問の目的を無効にするだろうと思います)
または
ビューがコントローラーに渡される前に、ビューのコンストラクターにモデルファクトリが挿入されますか?
この回答によると、ビューからモデルを呼び出しても問題ないようです。
今私の質問は、配線はどのように見えるでしょうか?
コントローラはモデルファクトリをビューに渡しますか?(私が間違っていることを理解していない限り、それを行うにはコントローラーをバイパスする必要があるため、この質問の目的を無効にするだろうと思います)
または
ビューがコントローラーに渡される前に、ビューのコンストラクターにモデルファクトリが挿入されますか?
一見すると、それで問題はありません。代替案を見てみましょう。
生のモデルをビューに渡し、ジェネリック モデル インターフェイスからヒントを入力します
表面的には、これで問題ないように見えるかもしれません。ただし、モデルが API で一貫していない場合 ($model->getPerson($id)
かなり可能性が高い など)、コントローラー モデルとビューが効果的に緊密に結合されています。
ビューは実際にはどのモデルも受け入れることができないため、コントローラーから生のモデルを注入することは少し自由すぎるかもしれず、将来的に矛盾や奇妙なエラーへの扉を開くかもしれません.
生のモデルをビューに渡し、目的のモデル クラスをヒントとして入力します
これにより、正しいモデルのみを渡すことができるという点で、以前のソリューションの自由度の問題が解決されます。しかし、これでビューをそのモデルにさらに結び付けることができました。だから、それは良くありません。
ビュー内でモデルをインスタンス化します。
これも理想的なソリューションではありません。テスト用にモデルをモックアウトすることができず、ビューをモデルに完全に結合しているためです。明確な SOLID 違反。
したがって、基本的にはモデルのファクトリを注入する必要があります。これにより、ビューは必要なモデルを決定できます (したがって、ファクトリに要求します)。モデルをモックアウトすることができます (別のファクトリを交換することによって)。また、ファクトリが返すものを調整することで、任意のモデルを渡すこともできます。
したがって、依存関係は疎結合になり、代わりにファクトリに依存します (これは、より良い依存関係です)。
それが私の最初の考えです。よりクリーンなソリューションがあるかどうかを確認するために、さらに考える必要がありますが、そこにあります...