wake-up-neo.com

Was sind die Unterschiede zwischen Presenter, Presentation Model, ViewModel und Controller?

Ich habe eine ziemlich gute Idee, wie jedes dieser Muster funktioniert, und weiß etwas über die kleinen Unterschiede zwischen ihnen, aber sind sie wirklich alle so verschieden voneinander?

Es scheint mir, dass Presenter, Presentation Model, ViewModel und Controller im Wesentlichen dasselbe Konzept sind.

Warum konnte ich nicht alle diese Konzepte als Controller klassifizieren? Ich denke, es könnte die gesamte Idee sehr vereinfachen.

Kann jemand ihre Unterschiede klar beschreiben?

Ich möchte klarstellen, dass ich die Funktionsweise der Muster verstehe und die meisten davon in der einen oder anderen Technologie implementiert habe. Was ich wirklich suche, ist die Erfahrung von jemandem mit einem dieser Muster und warum er sein ViewModel nicht zum Beispiel als Controller ansieht.

Ich gebe einige Reputationspunkte dafür, aber ich suche eine wirklich gute Antwort.

40
Nicholas

Neben den bereits erwähnten tollen Lektüren (Fowler & Miller) und auf Ihre Ausführungen zu Unterschieden zwischen Controller/Presenter/... aus Entwicklersicht :

Controller in MVC :

  • Controller ist die eigentliche Komponente, die aufgrund von Benutzerinteraktionen aufgerufen wird. (Entwickler müssen keinen Code schreiben, um Aufrufe an den Controller zu delegieren.)

  • Der Controller erhält die aktuellen Werte irgendwie aus dem View/context/bag/whatever, aber Sie würden nicht wirklich sagen, dass er mit dem View interagiert .

  • Der Controller entscheidet am Ende, welche Ansicht dem Benutzer angezeigt werden soll. Darin zeigt Controller auch eine explizite Vorstellung des Anwendungsnavigations-Workflows.

Moderator in MVP :

  • Presenter verfügt über Methoden, die von der Ansicht aufgerufen werden. Dabei handelt es sich um die eigentliche Komponente, die bei Benutzerinteraktion die Steuerung erhält. (Entwickler müssen Code in die Ansicht schreiben, um den Presenter aufzurufen.)

  • Der Presenter erhält die aktuellen Werte auf irgendeine Weise aus der Ansicht oder erhält sie beim Aufruf aus der Ansicht. Presenter ruft Methoden für die Ansicht auf, um ihren Status festzulegen (, füllen Sie sie , sagt Josh Smith). Bei einer vom Presenter aufgerufenen View-Methode werden möglicherweise einige kleine Einstellungen in ihrem Hauptteil vorgenommen.

  • Presenter zeigt keine explizite Vorstellung des Anwendungsworkflows. In der Regel wird davon ausgegangen, dass die Kontrolle an die aufrufende Ansicht zurückgegeben wird.

PresentationModel in PM :

  • PresentationModel verfügt über Methoden, die von der Ansicht aufgerufen werden. Dies ist die eigentliche Komponente, die bei Benutzerinteraktion die Steuerung erhält. (Entwickler müssen Code in die Ansicht schreiben, um das PresentationModel aufzurufen.)

  • PresentationModel hat eine viel größere gesprächigere Kommunikation mit View als ein Presenter. Es enthält auch mehr Logik, um den Wert aller in der Ansicht anzuwendenden Einstellungen zu ermitteln und diese tatsächlich in der Ansicht festzulegen. (Diese View-Methoden haben abwechselnd fast keine Logik.)

  • PresentationModel zeigt keine explizite Vorstellung des Anwendungsworkflows. Es wird normalerweise angenommen, dass die Kontrolle an die aufrufende Ansicht zurückgegeben wird.

ViewModel in MVVM :

  • ViewModel verfügt über Methoden, die von View aufgerufen (und deren Eigenschaften festgelegt) werden. Dabei handelt es sich um die eigentliche Komponente, die bei Benutzerinteraktion die Steuerung erhält. (Der Entwickler muss einen (deklarativen) Code in die Ansicht schreiben, um das ViewModel aufzurufen.)

  • ViewModel hat im Vergleich zu PresentationModel keine explizit gesprächige Kommunikation mit View (d. H. Es ruft View nicht oft auf, das Framework tut es). Es verfügt jedoch über viele Eigenschaften, die mit den Ansichtseinstellungen 1 zu 1 zugeordnet werden können. Es enthält immer noch dieselbe Logik, um den Wert all dieser Einstellungen zu ermitteln.

  • ViewModel zeigt keine explizite Vorstellung des Anwendungsworkflows. In der Regel wird davon ausgegangen, dass die Kontrolle an die aufrufende Ansicht zurückgegeben wird.

  • Irgendwie kopieren, was Josh Smith sagt ( http://msdn.Microsoft.com/en-us/magazine/dd419663.aspx ): MVVM-Muster ist ein Sonderfall von PM nutzt ein Framework (wie WPF/SL), um weniger Code zu schreiben.

57
superjos

Martin Fowler hat eine Seite über UI-Designmuster, in der er MVC, MVP und andere Muster definiert und dann spricht.

http://martinfowler.com/eaaDev/uiArchs.html

Ein Controller steuert die Benutzeroberfläche. Zum Beispiel würde es alle durch die Benutzeroberfläche ausgelösten Ereignisse behandeln und entsprechend behandeln.

A Presenter ist dagegen eher passiv und zeigt Daten einfach über die Benutzeroberfläche an, die eigene Ereignisse usw. verarbeitet, oder sie durch den Presenter an einen Dienst oder Befehl delegiert.

A ViewModel ist ein spezifisches Beispiel für einen Presenter, der für die Verwendung mit WPF/Silverlight-Bindung entwickelt wurde.

Ein Presentation Model ist ein Modell, das direkt von der Ansicht dargestellt werden kann. Wenn Ihre Modelle beispielsweise INotifyPropertyChanged für die Datenbindung implementieren, handelt es sich um Präsentationsmodelle.

38

Der Unterschied zwischen ihnen besteht im Wesentlichen darin, wie viel Code in der Ansicht enthalten ist. Die Wahl zwischen ihnen ist in der Tat eine Technologiewahl für Anwendungen wie WFP, WinForms, ASP MVC (2). Die Grundidee, die Logik von der Präsentation zu trennen, ist die gleiche.

Hier ist ein sehr guter Artikel über alle drei.

BEARBEITEN:

Ein mehr Artikelvergleich.

5
too

Zumindest in .NET wird MVP als Entwurfsmuster verwendet. Dies wird normalerweise mit Windows Forms-Anwendungen oder klassischem ASP.Net verwendet. Bei MVC und MVVC werden diese normalerweise mit ASP MVC verwendet, die eine andere Architektur als normale ASP.Net verwenden.

1
Stefan H

Meiner Meinung nach gibt es keine echten konzeptionellen Unterschiede zwischen MVP, MVVC, MVC und Presentation Model. Es gibt einige Detailunterschiede, aber am Ende kann alles als Modell des Model View Controller betrachtet werden. Die zusätzliche Benennung dient nur der Verwirrung, und ich denke, es wäre besser, eine Terminologie zu übernehmen, die einen gewissen Spielraum bei der Beschreibung eines Controllers zulässt. 

0
Nicholas

Ein wichtiger Unterschied zwischen MVP und MVVM ist die Art und Weise, wie die Ansicht keine aktive Rolle beim Aktualisieren der mittleren Schicht spielt, und ist ein "dummer" Akteur, da eine Ansicht für die Anzeige und nicht für das Verhalten gedacht sein sollte. Presenter ist empfohlen für Ansichten, die "komplex" sind, dh:

  • wenn Sie durch Klicken auf Activity ("Navigation") mit dem Klicken umgehen, ist es mit Presenter einfacher
  • das Ändern der Ansichtsänderungen entsprechend der Aktualisierung der Datenschicht (asynch) wird am besten mit ViewModel implementiert

refs:

https://developer.Android.com/topic/libraries/architecture/lifecycle#lc-bp

https://Android.jlelse.eu/why-to-choose-mvvm-over-mvp-Android-architecture-33c0f2de5516 enter image description here

 enter image description here

0
Droid Teahouse