Frage

Ich habe etwas Spaß versucht, meinen Kopf um einige MVP stuf zu bekommen, wie es User Controls gehört. Ich verwende .NET WinForms (oder so nahe daran) und Controller-Muster Supervising (na ja, ich glaube, ich bin :).

Die User Control sind selbst Teil einer MVP-Anwendung (seine Ansicht und haben einen zugehörigen Presenter usw.). Der Moderator gestartet werden immer an erster Stelle, und es beginnt das Modell (e) und dann auf View (s). Die Ansicht baut seine UI, ein Teil davon sein NEW wird der UC, die die Ansicht ist.

Nun ist das (Formular) Presenter muss über den UC Moderator wissen, aber ich denke, dass es nichts weiß, wie die Ansicht besteht. Die Form Presenter nicht der Fall, zum Beispiel wissen, dass der UC Teil des Formulars Controls-Auflistung, noch sollte es.

Darüber hinaus sollte die Design-Erfahrung nicht verändert werden; IOW die Entwickler der View (Form) sollte nur in der Lage sein, einen User Control aus der Toolbox auswählen und auf einem Formular.

Also, auf meine Fragen. Zum einen sind oben richtig meine Annahmen? Etwas fehlgeleitet? Vermasselt? WTF denken Sie?

Zum anderen ist es richtig, (genug?) Die Form Ansicht haben, um die UC-Ansicht aufrufen, und die Form Presenter die UC Presenter aufrufen und einen Mechanismus haben die UC-Ansicht zu sagen, was seine Presenter ist? Das bricht mir „Presenter erste“ Regel, aber ich bin nicht sicher, wie ich es anders zu tun.

Alle anderen Gedanken, Anregungen, Kommentare werden gerne angenommen.

- nwahmaet

War es hilfreich?

Lösung

Ein Moderator sollte als „autonomer Staat“ gedacht wird, in der Präsentationsebene. Das bedeutet, dass es ist dafür verantwortlich, dass die Präsentation der Ansicht des Zustands des Modells synchron ist. Der Grund, warum ich diese bringen ist, weil das „Muster“ von MVP wird oft in der dogmatischen Ansicht von verloren wie Dinge sollen getrennt werden. Es scheint, dass dies ein Grund, Martin Fowler entschieden ist, zu versuchen href="http://martinfowler.com/eaaDev/ModelViewPresenter.html" die Terminologie rund um die Muster MVP zu klären.

Meine favorisierten Geschmack von MVP ist die passive Ansicht rel="noreferrer">

I implementieren Verbund Bedienelemente und Formen sehr oft die passive Ansicht Muster. Es gibt im Wesentlichen drei verschiedene Konfigurationen:

  1. Ein Moderator für alle Bedienelemente in der Hierarchie. Flatten die Ansicht über eine Schnittstelle.
  2. Ein Moderator für jede Benutzersteuerung in dem Verbund Baum. Jeder Elternteil Moderator ist verantwortlich für die Instanziierung und sein Kind Moderatoren initialisiert. Die Bedienelemente sind zur Entwurfszeit erstellt und sind in der Lage, ohne einen Moderator zu fungieren (ohne Präsentationsverhalten)
  3. Ein Moderator für jede Benutzersteuerung in dem Verbund Baum. Alle der Moderatoren werden durch eine übergeordnete Steuerung Klasse lose gekoppelt. Die Controller-Klasse ist verantwortlich für construcing den Moderator, der Verdrahtung sie und die Koordinierung ihrer Veranstaltungen.

Es ist zwar eine Lösung der letzten Instanz für mich (wegen seiner Komplexität), denke ich, dass die letzte Option ist die Lösung, die Sie suchen.

Andere Tipps

Ich habe in einer Anwendung für mehrere Monate gegen dieses genaue Problem angerannt ich arbeite. Die Schlussfolgerung, die ich vor kurzem gekommen ist, dass es in vielen Fällen unmöglich sein könnte, die MVP-Muster an den beiden Fenstern und Benutzersteuerungsebenen, ohne „Brechen“ das Muster.

anzuwenden

Mein Gedanke darauf ist, dass der Benutzer der Kontrolle Teil der Ansicht Implementierung ist, und der Moderator weiß nicht, was in der Ansicht Umsetzung vor sich geht, was bedeutet, dass die Fensterebene Moderator durch die Erweiterung nicht über den Benutzer wissen sollte Moderators Kontrolle und somit sollte es keine Kommunikation zwischen ihnen, darunter Instanziierung der letzteren von der ersteren. Man könnte argumentieren, dass die Moderatorin des Benutzers Steuerteil der Fensteransicht Implementierung ist, und so die Fensteransicht kann der Benutzer die Kontrolle Moderator instanziiert. Aber es kann nicht die Modellklassen injiziert, die der Vortragende braucht, weil die Sicht nicht bewusst von ihnen sein sollte.

Die Schlussfolgerung, dass ich glaube, ich bin der Ankunft ist, dass alle Bedienelemente View-Implementierung spezifisch sind, und so sollte vollständig innerhalb der Ansicht Silo des größeren Muster enthalten sein. Als solche kommen sie nicht ihre eigenen Moderatoren haben ... zumindest nicht mit der Steuer Implementierung selbst gebündelt. Stattdessen sollten sie indirekt durch das übergeordnete Fenster des Moderators auf der Ansicht Schnittstelle, über Pass-Through-Feldern ausgesetzt werden manipuliert. Kurz gesagt, wird der Benutzer die Kontrolle auf den Vortragenden nicht durch seine eigene Schnittstelle ausgesetzt, sondern über eine gemeinsame Passthrough-Schnittstelle, die von der übergeordneten Ansicht implementiert. Nennen dies eine „Teilansicht Schnittstelle“.

kann Ihr Moderator enthalten dann Instanzen eines wiederverwendbaren Unter Moderator Klasse, die nur mit diesem Teilansicht-Schnittstelle und die entsprechenden Teile des Modells arbeitet. Dies ermöglicht Ihnen, das Neuschreiben der Moderator Code zu vermeiden, die aus dem Modell jedes Mal, wenn Sie die Steuerung verwenden müssen zu übersetzen, und es verhindert, dass die Fensteransicht aus, um über das Modell kennen, um Informationen über Moderators an die Steuerung zu übergeben.

Was dies effektiv macht, ist es weiterhin die Benutzersteuerung trennt, als ein Modul, aus dem Datenmodell. Dies macht Sinn, wenn Sie von einem Benutzersteuer denken, als Ganzes, als ein Element der Ansicht Umsetzung. Als wiederverwendbare Einheit, ist es ein Stück Ansicht Funktionalität und kein Teil davon sollte Ihr Datenmodell gebunden werden.

Ihre Fragen allgemein sind, dass eine Vielzahl von Programmen Anwendung finden könnte.

In diesem Fall meine Vermutung ist, dass Sie bei Observer-Muster aussehen sollen.

Sie haben eine Schnittstelle, die alles, was diese Ansicht verwendet würde implementieren. Dann würde sie sich registrieren, wenn die Anwendung mit einer Sammlung von dieser Schnittstellen initialisiert. Jeder Befehl, diese Ansicht zu aktualisieren braucht würde die Sammlung Anmeldern durchquert, die jede Ansicht aktualisiert werden soll.

Im Gegensatz zu typischen Beispielen werden die Ansichten würden User Controls sein. Sie haben die Flexibilität, jedes UI-Element, die eine Schnittstelle zur Herstellung implementieren, so dass Sie Dialoge, voller Formulare, etc. zusätzlich zu Ihrer Benutzerkontrolle nutzen könnten.

Schließlich erinnern die User Control NICHT der Ansicht ist, aber die Umsetzung der Ansicht. Was auch immer Schema, das Sie übernehmen können Sie festlegen, was die Ansicht so tief wie Sie wollen und haben die Benutzersteuerung, die Schnittstelle implementieren.

scroll top