私はモデルビューコントローラー、モデルビュープレゼンター、モデルビュービューモデルなどについて読んでいますが、一般的に、基本的な概念は非常に理解しやすいように見えます。可能。デザインチョコレートにロジックピーナッツバターを入れないでください。かっこいい.
問題は、その3番目の部分についてはまだ少し曖昧だということです...モデルでもビューでもない部分です。誰もがそれを何と呼ぶべきか、何をすべきか、何が適切で、何が間違っているのかについて独自の考えを持っているようです...そして、プレゼンターがいつビューモデルになるのか、そしてビューがいつなのかを理解しようとしています。それはプレゼンターの仕事であり、-
私はとりとめています。
それらの違いを誰かに説明するように依頼するのではなく、それはすでに何度も行われているためです(私は知っています。私は数えることができるよりも多くの記事を読んでいます)-の考えを聞きたいと思います私が一緒に石畳を作ったモデルのプログラマはほとんどいません。
とは言っても、このデザインをどのように分類しますかそしておそらくもっと重要なことはこれについて明らかに悪いことはありますか?確かに、私は聞きたいですこれが本当に堅実なデザインである場合は良いことをしますが、賞賛よりも堅実なアドバイスを与えられたいと思います。
注:Model-View-の不思議な3番目の部分には「ブリッジ」を使用しますか? 「どうあるべきか」について潜在意識的な提案を回避するため。
ほぼカバーしていると思います。どうしても、私がよく使用するデザインについての質問があれば歓迎します。同様に、どんな提案も勧めます。
そしていつものように、あなたの時間をありがとう。
あなたのフレーズ
「モデルとビューの間のコーディネーターとトランスレーターです。」
ブリッジがMVPアーキテクチャのプレゼンターであることを示します。
MVPとMVCは非常に似ていますが、MVPではプレゼンターのみがモデルを監視しますが、MVCではビューはモデルを直接監視することもできます(プレゼンターを「ブリッジ」として使用する必要はありません)。
モデルの責任
「データが変更されたときにBridgeに通知します(Bridgeが関心を示したデータの場合)」。
おそらく不適切な言い回しまたは間違いです。モデルにBridge/Presenter/ControllerまたはViewのいずれにも依存させたくない場合。代わりに、オブザーバーパターン、イベント、またはリアクティブプログラミングのいずれかを使用して、ブリッジがモデルの変更にsubscribeできるようにします。そして、あなたはあなたの責任を次のように言い換えることができます:
「外部のサブスクライバー(何も知らない)が状態または計算結果を監視できるようにします。」
モデルがコントローラーまたはビューに依存しない場合、テストが容易になり、移植性が大幅に向上します。
あなたを混乱させることの1つは、両方とも一般にmodel-view-controllerと呼ばれている2つの完全に異なるパターンがあることです。
Smalltalkで実装され、ローカルguiシステムに役立つオリジナルがあります。また、コントローラーがサーバー上に配置できるようにビューとコントローラーの責任の一部を交換する、私がweb-mvcと考える傾向があるものもあります。クライアント上にあるビュー(おそらくレンダリングされたhtmlとして、または多分ajaxを介して)。
あなたの説明は、web-mvcのほとんどの定義に収まるように聞こえます。
この正確な命名法については、プログラミングコミュニティで多くの議論があります。誰もがほとんど何についても同意しないようです。
私にとって、ブリッジがビューにどのように接続されているかによって、名前が決まります。
時には物事はそれほど明確ではありません。たとえば、プレゼンターを複数のサブビューで構成される複合ビューに接続したり、ビューの知識がなくてもコントローラーを作成したりできます。それにもかかわらず、私のルールは良い出発点だと思います。
余談ですが、私は次のように責任を組み合わせたいと思います。
主な責任:永続的なデータ
第2の役割:更新を検証し、オブザーバーに更新を通知します
主な責任:現在のデータ
第2の役割:入力を受け入れる、UXを提示する
主な責任:データの更新
第2の役割:クリーンな入力、データとビューの同期
提案されたパターンは表面上は正しいように見え、小さなインスタンスでは間違いなく機能しますが、アプリがより複雑になると、何が何を更新し、誰がどこでリッスンするのか、なぜ私が試みているのかわからないという問題に直面します非常に多くのビュー内から非常に多くのモデルを制御するために、すべてが互いにアクセスする必要がある人など.
次のパターンを使用してアイデアを拡張することをお勧めします(Amy Palamountainの講演から引用 Enemy of the State ):
モデル
ビュー
コントローラ
モジュール
レイアウトマネージャー
ディスパッチャ
アプリケーション
この種のパターンを使用すると、アプリケーションを構成可能にし、単体テストを行ったり、Bridgeが時間の経過とともに構築する複雑性を取り除いたり、懸念を適切に分離したりできます。
エイミーが指摘するように:クライアント上にサーバーを構築しないように注意してください。そしてdoctrine)に陥らないように注意してください。代わりに、これらすべてのアイデア(およびここでの他の答え)を取り、アプリケーションとチームに最適なもの。
Amy Palamountainの講演をご覧になることを強くお勧めします Enemy of the State (そこからこれらのアイデアが生まれました)、または少なくとも見直す 講演のスライド =。