Es gibt viele Antworten auf diese Frage, aber ich hatte das Gefühl, dass eine wirklich einfache Antwort nötig ist, um die beiden klar zu vergleichen. Hier ist die Diskussion, die ich mir ausgedacht habe, wenn ein Benutzer nach einem Filmnamen in einer MVP- und MVC-App sucht:
Benutzer: Klick klick
Siehe : Wer ist das? [ MVP | MVC ]
Benutzer: Ich habe gerade auf die Suchschaltfläche geklickt
Siehe : Ok, warte kurz . [ MVP | MVC ]
( Siehe Aufruf der Präsentator | Controller ) [ MVP | MVC ]
Siehe : Hallo Präsentator | Controller Was soll ich tun, wenn ein Benutzer gerade auf die Schaltfläche "Suchen" geklickt hat? [ MVP | MVC ]
Präsentator | Controller : Hallo Siehe Gibt es einen Suchbegriff auf dieser Seite? [ MVP | MVC ]
Siehe : Ja, hier ist es "Klavier" [ MVP | MVC ]
Präsentator | Controller : Danke Siehe In der Zwischenzeit suche ich den Suchbegriff in der Modell zeigen Sie ihm/ihr bitte einen Fortschrittsbalken [ MVP | MVC ]
( Präsentator | Controller ruft die Modell ) [ MVP | MVC ]
Präsentator | Controller : Hallo Modell Haben Sie einen Treffer für diesen Suchbegriff?: "Klavier" [ MVP | MVC ]
Modell : Hallo Präsentator | Controller Ich überprüfe das mal [ MVP | MVC ]
( Modell macht eine Abfrage an die Filmdatenbank ) [ MVP | MVC ]
( Nach einer Weile ... )
-------------- Hier beginnen MVP und MVC zu divergieren ---------------
Modell : Ich habe eine Liste für Sie gefunden, Präsentator Hier ist es in JSON "[{"name": "Klavierlehrer", "Jahr":2001},{"name": "Klavier", "Jahr":1993}]" [ MVP ]
Modell : Es liegt ein Ergebnis vor, Controller . Ich habe eine Feldvariable in meiner Instanz erstellt und sie mit dem Ergebnis gefüllt. Ihr Name ist "searchResultsList" [ MVC ]
( Präsentator | Controller danke Modell und kommt zurück zum Siehe ) [ MVP | MVC ]
Präsentator : Danke fürs Warten Siehe habe ich eine Liste mit passenden Ergebnissen für Sie gefunden und sie in ein vorzeigbares Format gebracht: ["Klavierlehrer 2001", "Klavier 1993"]. Bitte zeigen Sie sie dem Benutzer in einer vertikalen Liste an. Bitte blenden Sie auch den Fortschrittsbalken aus [ MVP ]
Controller : Danke fürs Warten Siehe habe ich gefragt Modell über Ihre Suchanfrage. Es sagt, dass es eine Liste der übereinstimmenden Ergebnisse gefunden und sie in einer Variablen namens "searchResultsList" innerhalb seiner Instanz gespeichert hat. Sie können sie von dort abrufen. Blenden Sie bitte auch den Fortschrittsbalken aus [ MVC ]
Siehe : Ich danke Ihnen sehr Präsentator [ MVP ]
Siehe : Vielen Dank "Controller" [ MVC ] (Jetzt ist die Siehe stellt sich selbst in Frage: Wie soll ich die Ergebnisse präsentieren, die ich durch die Modell für den Nutzer? Soll das Produktionsjahr des Films an erster oder letzter Stelle stehen? Soll es in einer vertikalen oder horizontalen Liste stehen? ...)
Falls es Sie interessiert, ich habe eine Reihe von Artikeln geschrieben, die sich mit Architekturmustern für Anwendungen befassen (MVC, MVP, MVVP, saubere Architektur, ...), begleitet von einem Github Repo aquí . Auch wenn das Beispiel für Android geschrieben wurde, können die zugrunde liegenden Prinzipien auf jedes Medium angewendet werden.
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