Modell-Ansicht-Präsentator
Sur MVP Der Presenter enthält die UI-Geschäftslogik für die View. Alle Aufrufe der Ansicht werden direkt an den Presenter delegiert. Der Presenter ist auch direkt von der View entkoppelt und kommuniziert mit ihr über eine Schnittstelle. Dies soll das Mocking der View in einem Unit-Test ermöglichen. Ein gemeinsames Merkmal von MVP ist, dass es eine Menge von Zwei-Wege-Dispatching geben muss. Wenn zum Beispiel jemand auf die Schaltfläche "Speichern" klickt, delegiert der Event-Handler an die "OnSave"-Methode des Presenters. Sobald der Speichervorgang abgeschlossen ist, ruft der Präsentator die Ansicht über seine Schnittstelle zurück, so dass die Ansicht anzeigen kann, dass der Speichervorgang abgeschlossen ist.
MVP ist ein sehr natürliches Muster, um eine getrennte Darstellung in WebForms zu erreichen. Der Grund dafür ist, dass die Ansicht immer zuerst von der ASP.NET-Laufzeit erstellt wird. Sie können Erfahren Sie mehr über beide Varianten .
Zwei Hauptvarianten
Passive Ansicht: Die Ansicht ist so dumm wie möglich und enthält fast keine Logik. Ein Presenter ist ein Mittelsmann, der mit der Ansicht und dem Modell spricht. Die Ansicht und das Modell sind vollständig voneinander abgeschirmt. Das Model kann Ereignisse auslösen, aber der Presenter abonniert diese, um die View zu aktualisieren. In der passiven Ansicht gibt es keine direkte Datenbindung, stattdessen stellt die Ansicht Setter-Eigenschaften zur Verfügung, die der Präsentator zum Setzen der Daten verwendet. Der gesamte Zustand wird im Presenter und nicht in der Ansicht verwaltet.
- Pro: maximale Testbarkeit der Oberfläche; saubere Trennung von View und Model
- Nachteil: mehr Arbeit (z. B. alle Setter-Eigenschaften), da Sie die gesamte Datenbindung selbst vornehmen.
Aufsichtsführender Controller: Der Presenter verarbeitet Benutzergesten. Die Ansicht bindet sich durch Datenbindung direkt an das Modell. In diesem Fall ist es die Aufgabe des Presenters, das Model an die View weiterzugeben, damit diese sich daran binden kann. Der Presenter enthält auch die Logik für Gesten wie das Drücken einer Schaltfläche, die Navigation usw.
- Pro: Durch die Nutzung der Datenbindung wird der Umfang des Codes reduziert.
- Nachteil: Es gibt eine weniger testbare Oberfläche (wegen der Datenbindung), und es gibt weniger Kapselung in der Ansicht, da sie direkt mit dem Modell spricht.
Modell-Ansichts-Steuerung
In der MVC Der Controller ist dafür verantwortlich, zu bestimmen, welche Ansicht als Reaktion auf eine beliebige Aktion angezeigt werden soll, auch wenn die Anwendung geladen wird. Dies unterscheidet sich von MVP, wo Aktionen über die View zum Presenter geleitet werden. In MVC korreliert jede Aktion in der View mit einem Aufruf eines Controllers zusammen mit einer Aktion. Im Web beinhaltet jede Aktion einen Aufruf an eine URL, auf deren anderer Seite ein Controller steht, der darauf antwortet. Sobald dieser Controller seine Verarbeitung abgeschlossen hat, gibt er die richtige Ansicht zurück. Die Abfolge setzt sich während der gesamten Lebensdauer der Anwendung auf diese Weise fort:
Action in the View
-> Call to Controller
-> Controller Logic
-> Controller returns the View.
Ein weiterer großer Unterschied zu MVC ist, dass die Ansicht nicht direkt an das Modell gebunden ist. Der View rendert einfach und ist völlig zustandslos. In MVC-Implementierungen hat die View normalerweise keine Logik im Code dahinter. Dies steht im Gegensatz zu MVP, wo dies absolut notwendig ist, denn wenn die View nicht an den Presenter delegiert, wird sie nie aufgerufen.
Präsentation Modell
Ein weiteres Muster, das man sich ansehen sollte, ist die Präsentation Modell Muster. Bei diesem Muster gibt es keinen Presenter. Stattdessen bindet sich die Ansicht direkt an ein Präsentationsmodell. Das Präsentationsmodell ist ein Modell, das speziell für die Ansicht erstellt wurde. Das bedeutet, dass dieses Modell Eigenschaften aufweisen kann, die man niemals in ein Domänenmodell einfügen würde, da dies eine Verletzung der Gewaltenteilung darstellen würde. In diesem Fall bindet sich das Präsentationsmodell an das Domänenmodell und kann Ereignisse abonnieren, die von diesem Modell kommen. Die Ansicht abonniert dann Ereignisse, die vom Präsentationsmodell kommen, und aktualisiert sich entsprechend. Das Präsentationsmodell kann Befehle bereitstellen, die die Ansicht zum Aufrufen von Aktionen verwendet. Der Vorteil dieses Ansatzes besteht darin, dass Sie den Code-Behind im Wesentlichen vollständig entfernen können, da das PM das gesamte Verhalten des Views vollständig kapselt. Dieses Muster ist ein sehr guter Kandidat für den Einsatz in WPF-Anwendungen und wird auch als Model-View-ViewModel .
Es gibt eine MSDN-Artikel über das Präsentationsmodell und einen Abschnitt in der Anleitung für zusammengesetzte Anwendungen für WPF (ehemals Prism) über Getrennte Darstellungsmuster
6 Stimmen
mvc.givan.se/#mvp
3 Stimmen
IDK, aber angeblich für die ursprüngliche MVC, war es in der kleinen verwendet werden soll. Jede Schaltfläche, jedes Etikett usw. hatte sein eigenes View- und Controller-Objekt, zumindest behauptet Onkel Bob das. Ich glaube, er hat über Smalltalk gesprochen. Schauen Sie sich seine Vorträge auf YouTube an, sie sind faszinierend.
1 Stimmen
MVP fügt eine zusätzliche Ebene der Indirektion hinzu, indem es den View-Controller in einen View und einen Presenter aufteilt...
4 Stimmen
Der Hauptunterschied besteht darin, dass der Controller in MVC keine Daten vom Modell an die Ansicht weitergibt. Er benachrichtigt lediglich die Ansicht, um die Daten vom Modell selbst zu erhalten. In MVP hingegen gibt es keine Verbindung zwischen View und Model. Der Presenter selbst holt sich die benötigten Daten aus dem Model und gibt sie an die View weiter, um sie anzuzeigen. Mehr dazu und ein Android-Beispiel in allen Architekturmustern finden Sie hier: digigene.com/kategorie/Android/Android-Architektur
1 Stimmen
Sie werden genannt Architekturmuster no Entwurfsmuster . Wenn Sie den Unterschied wissen wollen, lesen Sie diese