Frage

Ich bin Nacharbeiten eine Anwendung WinForms und möchte eine Variation der Presentation Model Muster verwenden, für die Benutzeroberfläche. Könnte mir jemand sagen, aus den folgenden Erklärungen, wenn ich es richtig mache?


Ich habe beschlossen, Abhängigkeiten wie folgt festgelegt:

   Model <---- Presentation Model <---- View

Das heißt:

  • Das Modell ist nicht bekannt, nichts außer sich selbst.

  • Das Präsentationsmodell einen Verweis auf das Modell hat (aber nicht umgekehrt).

  • Die Ansicht, die einen Verweis auf das Präsentationsmodell hat (aber nicht umgekehrt).

Ich bin mit WinForms-Datenbindung die Ansicht zu halten und das Präsentationsmodell synchronisiert.

Nun, das alles funktioniert wie ein Zauber, es sei denn, ich muss mit zum Beispiel beschäftigen Ein Klick auf eine Schaltfläche „Schließen“ des Formulars. Da das Präsentationsmodell keinen Hinweis auf die Ansicht hat, kann es nicht zu irgendwelchen Veranstaltungen der Ansicht veröffentlicht abonnieren. So habe ich mit folgenden Krücke kommen:

Presentation Model                   View
+--+                                 +--+
|  |                                 |  |
|  |                                 | <--------X closeButton.Click event fires
|  |                                 |  |
|  |                         +--------X |
|  |   CloseRequested = true |       |  | 
|  |                         +--------> |
|  |                                 |  |
|  | CloseRequested   CloseRequested |  |
| <-----------------------------------< |
|  |                                 |  |
| X--------+                         |  |
|  |       | IsClosed = true         |  |
| <--------+                         |  |
|  |                                 |  |
|  | IsClosed              MustClose |  |
| >-----------------------------------> |
|  |                                 |  |
|  |                                 | X--------> view.Close()
|  |                                 |  |
+--+                                 +--+

Das heißt:

  • Der Benutzer klickt auf die Schaltfläche "Schließen".

  • Die Click Ereignis der Schaltfläche in der Ansicht erfaßt, die reagiert, indem er die Eigenschaft CloseRequested Einstellung.

  • Die Datenübertragungen diesen Wert auf eine entsprechende Eigenschaft in dem Präsentationsmodell verbindlich.

  • Das Präsentationsmodell reagiert auf diese Veränderung durch seine Eigenschaft IsClosed Einstellung.

  • Die Datenübertragungen diesen Wert in die Ansicht des MustClose verbindlich.

  • Die Ansicht reagiert auf diese Veränderung sich durch Schließen.

Das Präsentationsmodell recht ist schön aus der Sicht entkoppelt, und umgekehrt, aber Das ist eine Menge Arbeit, nur eine einzige Schaltfläche Befehl zu verarbeiten . Gibt es einen einfacheren Weg, angesichts dem Abhängigkeitsgraphen ich entschieden habe?

War es hilfreich?

Lösung

Ich habe vor kurzem eine Windows Forms-Anwendung auf die MVP-Architektur wurde die Umwandlung, und es sieht aus wie Sie Ihre Abhängigkeiten in einer ähnlichen Art und Weise eingerichtet haben zu dem, was ich getan habe. Allerdings habe ich einfach eine IPresenter Schnittstelle haben, die Methoden der Blick auf Benutzeranforderungen passieren lassen definiert. Da die Sicht bereits eine Abhängigkeit von der Moderatorin und einen Verweis auf sie hat, scheint es sinnvoll, einfach direkt Anforderungsmethoden auf das nennen.

Also in meinem System, der Moderator Streams an Veranstaltungen aus dem Modell und feuert seine eigenen Präsentationsveranstaltungen für interessierte Ansicht hören aus. Die Ansicht reagiert auf diese Ereignisse für sich gegebenenfalls zu aktualisieren, und leitet Benutzeranforderungen auf den Vortragenden, wenn sie gemacht werden.

Andere Tipps

es ist nur meine Meinung.

Arbeiten mit Präsentationsmodell 100% UI Unterstützung Bindung für Daten benötigen. Auch machen WPF nicht SCHLIEßEN Aktion als Bindable. Viele Sache wird nicht funktioniert reibungslos in Präsentationsmodell wie MessageBox Bestätigung. auch kann es mit Presenter-Schnittstelle abstrahiert werden, aber immer noch nicht gut schmecken und Einfachheit geopfert wird.

in der anderen Seite sind die Hauptziele der Präsentationsmodell zu testen The View Logic. In einigen Fällen, wenn Ihre „Close Aktion“ sollte Einheit getestet werden, da es eine gewisse Logik ist, bevor es in der Nähe, dann ist der Code die einzige Wahl ist. aber wenn es nur eine einfache Bestätigung „Sind Sie sicher, dass Sie aufhören wollen“ dann besser setzen, dass auf der Ansicht nicht in Präsentationsmodell, weil es nicht zu Unit-Test erforderlich ist.

  

Die Ansicht hat einen Verweis auf die   Präsentationsmodell (aber nicht umge   kehrt).

AFAIK sollte die Präsentation einen refference Blick hat genauer IView Schnittstelle, so dass die Präsentation dosen't Paare mit Beton Blick. Dann in Präsentation Klasse Sie Ansicht Methoden aufrufen können und auf Sicht auch über den IView abonnieren.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top