Martin Fowler によるプレゼンテーション モデル ノートおよびプレゼンテーション モデルに関する MSDN ドキュメントによると、プレゼンテーション モデル クラスは UI クラスを認識しないようにする必要があり、同様にビジネス モデル クラスはプレゼンテーション モデル クラスを認識しないようにする必要があると説明されています。
UI はプレゼンテーション モデルに広範囲にデータバインドする必要があります。プレゼンテーション モデルは、1 つまたは複数のドメイン/ビジネス モデル オブジェクトと調整してジョブを完了します。プレゼンテーション モデルは基本的に、UI で最大限のデータ バインディングを容易にする方法でドメイン モデル データを提示します。これにより、UI が行う決定を可能な限り減らし、プレゼンテーション動作のテスト容易性を高めます。これにより、プレゼンテーション モデル クラスもジェネリックになります。つまり、特定の UI テクノロジに依存しません。
ここで、リスト フォーム (CustomerList など) と別のルート フォーム (Customer など) があり、ボタン クリックで CustomerList フォームから Customer を編集できるようにするユース ケースがあるとします。
説明を簡単にするために、カスタマー リストがメニューから開かれたとき (つまり、カスタマー メニューがクリックされたとき) にいくつかのアクションが発生し、メニュー クリック イベントからカスタマー リストが表示されたとします。
上記のユース ケースに従って、Customer List から Customer Root UI (単一の顧客) を開く必要があります。それ、どうやったら出来るの?
Editボタンのクリックイベントで必要なオブジェクト(BusinessModel、PresentationModel、UI)をビルドし、そこからCustomerEdit UIを呼び出しますか?
プレゼンテーション モデル クラスから CustomerEdit UI を構築し、プレゼンテーション モデルから UI を表示しますか? これは、以下の 2 つの方法のいずれかで実行できます。次の順序でオブジェクトを作成します DomainModel->PresentationModel-UIForm b. Unity.Resolve(); を使用します。いずれにせよ、P モデルは CustomerEdit が配置されている具体的な UI アセンブリを参照する必要があるため、Presentation Model に違反しています。また、P モデルは WinForm を直接参照して使用する必要があり、UI テクノロジに依存しなくなります。
違反は理論上のものであり、無視することができますが、私が間違った方向に進んでいるかどうかについてコミュニティの意見を求めます. リスト(親)フォームから子フォームを呼び出すより良い方法があるかどうかを提案してください。
- ラジャーシ