質問

アプリケーション(WinForms .NET 2.0アプリ)に複数のMVPトライアドがあり、各トライアドが1つの責任領域を管理しているとします。 MVPトライアド間のコミュニケーションを調整するための好ましい方法は何ですか?

オプション1 各モデルを「持っている」コーディネーターオブジェクトは、各モデルで必要なイベントをサブスクライブし、どのシナリオでどのモデルメソッドを呼び出すかを決定することで調整を管理します。

これが「神」クラスである可能性があることを心配してください。

オプション2 プレゼンターは別のプレゼンターを「持って」おり、モデルで関心のあることが発生すると、プレゼンターは他のプレゼンターを使用してコミュニケーションを進めます。

プレゼンターがパブリックインターフェイス(プレゼンターファーストアプローチ)を持つべきではないことを心配してください。これはそれを壊します。

スケーラブルなOO方式でこの問題を解決するために、他の人が何をしたのか疑問に思っています。別のMVPトライアドを追加するとどうなりますか?それを私のコーディネーターに合わせるのはどれほど難しいでしょうか? WinFormsアプリで複数のMVPトライアドを管理する方法の良い例がいくつかあるはずです。

役に立ちましたか?

解決

曖昧ではありません...しかしそれは状況によって異なります。私が過去に使用した2つのアプローチ:

  1. イベントアグリゲーターパターンを使用して、プレゼンターは、他のプレゼンターが処理できるイベントを開始します。例えばPresenterAは:events.Raise<MyEvent> ()を実装し、PresenterBは:IHandler<MyEvent>を実装し、それに応じてpublic void Handle (MyEvent @event)メソッドで反応します。
  2. 調整が必要なプレゼンターに注入される共有モデルを使用します。たとえば、一方のプレゼンターが特定のFooの選択を処理し、もう一方のプレゼンターがFooの詳細で詳細パネルを更新する必要がある場合、IFooSelection状態モデルを使用して、現在の選択の概念を調整する必要がある両方のプレゼンターに挿入できます。'。

    インターフェース: ジェネラコディセタグプレ

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top