Frage

Sagen Sie mehr MVP Triaden in Ihrer Anwendung (WinForms .NET 2.0 app) und jede Triade Blicke nach einem Verantwortungsbereich. Was ist Ihr bevorzugter Weg, um die Kommunikation zwischen den MVP Triaden zu koordinieren?

Option 1 Ein Koordinator Objekt, das „hat“ jedes Modell und sieht nach der Abstimmung durch in jedem die notwendigen Ereignisse abonnieren und dann zu entscheiden, welches Modell Methoden in welchen Szenarien zu nennen.

Worry, dass dies eine „Gott“ Klasse sein kann.

Option 2 Ein Moderator „hat“ einen anderen Moderator und wenn etwas von Interesse in dem Modell der Fall ist, verwendet der Moderator den anderen Vortragenden zu bewegen Kommunikation zusammen.

Worry, dass die Moderatoren nicht eine öffentliche Schnittstelle (Presenter-First-Ansatz) und diese Pausen haben sollen, dass.

Ich frage mich, was andere Leute dieses Problem in einer skalierbaren OO Art und Weise getan haben, zu lösen. Was passiert, wenn ich eine andere MVP Triade hinzufügen? Wie schwer wird es, dass in meinen Koordinator passen zu? Es müssen einige gute Beispiele dafür, wie mehrere MVP Triaden in einer WinForms-Anwendung zu verwalten?

War es hilfreich?

Lösung

Nicht zu vage ... aber es hängt davon ab. Die beiden Ansätze Ich habe in der Vergangenheit verwendet:

  1. Verwenden Sie ein Ereignis Aggregator Muster und haben die einzelnen Moderatoren abfeuern Ereignisse, dass andere Moderatoren behandeln können. z.B. PresenterA tut: events.Raise<MyEvent> () und PresenterB implementiert. IHandler<MyEvent> und reagiert dementsprechend in seiner public void Handle (MyEvent @event) Methode
  2. Verwenden Sie ein gemeinsames Modell, das in die Präsentatoren eingespritzt wird, dass Bedarf abgestimmt werden. Zum Beispiel, wenn ein Moderator Griff Auswahl eines bestimmten Foo und die anderen Moderatoren Bedürfnisse ein Detailfenster mit Foo Details zu aktualisieren, könnte ich ein IFooSelection Zustandsmodell und inject verwenden, die in den beiden Moderatoren, dass Notwendigkeit, das Konzept der ‚aktueller Auswahl zu koordinieren ‘.

Die Schnittstelle:

public interface IFooSelection {
    public event EventHandler Changed;
    Foo Selected { get; set; }
}
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top