1

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

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

これが「神」クラスかもしれないことを心配してください。

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

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

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

4

1 に答える 1

3

あいまいではありません...しかし、場合によります。私が過去に使用した2つのアプローチ:

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

インターフェース:

public interface IFooSelection {
    public event EventHandler Changed;
    Foo Selected { get; set; }
}
于 2010-11-22T17:30:26.647 に答える