Es gibt viele Antworten auf die Frage, aber ich hatte das Gefühl, dass eine wirklich einfache Antwort erforderlich ist, um die beiden klar zu vergleichen. Hier ist die Diskussion, die ich erfunden habe, als ein Benutzer in einer MVP- und MVC-App nach einem Filmnamen sucht:
Benutzer: Klicken Sie auf ...
Ansicht : Wer ist das? [ MVP | MVC ]
Benutzer: Ich habe gerade auf die Suchschaltfläche geklickt…
Ansicht : Ok, warte eine Sekunde…. [ MVP | MVC ]
( Ansicht, die den Presenter | Controller aufruft …) [ MVP | MVC ]
Ansicht : Hey Presenter | Controller , ein Benutzer hat gerade auf die Suchschaltfläche geklickt. Was soll ich tun? [ MVP | MVC ]
Moderator | Controller : Hey View , gibt es einen Suchbegriff auf dieser Seite? [ MVP | MVC ]
Ansicht : Ja,… hier ist es… „Klavier“ [ MVP | MVC ]
Moderator : Danke View ,… während ich den Suchbegriff für das Modell nachschlage, zeigen Sie ihm / ihr bitte einen Fortschrittsbalken [ MVP | MVC ]
( Presenter | Controller ruft das Modell auf …) [ MVP | MVC ]
Moderator | Controller : Hey Model , haben Sie eine Übereinstimmung mit diesem Suchbegriff?: "Klavier" [ MVP | MVC ]
Modell : Hey Moderator | Controller , lassen Sie mich überprüfen ... [ MVP | MVC ]
( Model stellt 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, Moderator , hier in JSON "[{" Name ":" Klavierlehrer "," Jahr ": 2001}, {" Name ":" Klavier "," Jahr ": 1993} ] ”[ MVP ]
Modell : Es sind einige Ergebnisse verfügbar, Controller . Ich habe in meiner Instanz eine Feldvariable erstellt und mit dem Ergebnis gefüllt. Der Name lautet "searchResultsList" [ MVC ]
( Presenter | Controller bedankt sich bei Model und kehrt zur Ansicht zurück ) [ MVP | MVC ]
Moderator : Vielen Dank für das Warten View , ich habe eine Liste mit passenden Ergebnissen für Sie gefunden und sie in einem vorzeigbaren Format angeordnet: ["Piano Teacher 2001", "Piano 1993"]. Bitte zeigen Sie es dem Benutzer in einer vertikalen Liste. Bitte verstecken Sie jetzt auch den Fortschrittsbalken [ MVP ]
Controller : Vielen Dank, dass Sie auf View gewartet haben. Ich habe Model nach Ihrer Suchanfrage gefragt . Es heißt, es habe eine Liste übereinstimmender Ergebnisse gefunden und diese in einer Variablen namens "searchResultsList" in seiner Instanz gespeichert. Sie können es von dort bekommen. Bitte verstecken Sie jetzt auch den Fortschrittsbalken [ MVC ]
Ansicht : Vielen Dank Presenter [ MVP ]
Ansicht : Vielen Dank, "Controller" [ MVC ] (Jetzt stellt sich die Ansicht selbst die Frage: Wie soll ich dem Benutzer die Ergebnisse präsentieren, die ich vom Modell erhalte ? Sollte das Produktionsjahr des Films zuerst oder zuletzt kommen ...? Sollte es sein in einer vertikalen oder horizontalen Liste sein? ...)
Falls Sie interessiert sind, habe ich eine Reihe von Artikeln geschrieben, die sich mit Architekturmustern von Apps (MVC, MVP, MVVP, saubere Architektur, ...) befassen, begleitet von einem Github-Repo hier . Obwohl das Beispiel für Android geschrieben wurde, können die zugrunde liegenden Prinzipien auf jedes Medium angewendet werden.