In MVP bezieht die Ansicht Daten aus dem Präsentator, der Daten aus dem Modell zeichnet und vorbereitet/normalisiert, während in MVC der Controller Daten aus dem Modell bezieht und festlegt, indem er sie in die Ansicht schiebt.
In MVP können Sie eine einzelne Ansicht mit mehreren Präsentatoren und einen einzelnen Präsentator mit verschiedenen Ansichten arbeiten lassen.
MVP verwendet in der Regel eine Art Bindungsframework, z. B. das Microsoft WPF-Bindungsframework oder verschiedene Bindungsframeworks für HTML5 und Java.
In diesen Frameworks weiß das UI/HTML5/XAML, welche Eigenschaft des Presenters jedes UI-Element anzeigt. Wenn Sie also einen View an einen Presenter binden, sucht der View nach den Eigenschaften und weiß, wie er Daten von ihnen abrufen kann und wie er sie einstellen muss, wenn ein Wert in der UI vom Benutzer geändert wird.
Wenn es sich bei dem Modell beispielsweise um ein Auto handelt, dann ist der Präsentator eine Art Autopräsentator, der die Eigenschaften des Autos (Baujahr, Hersteller, Sitze usw.) für die Ansicht bereitstellt. Die Ansicht weiß, dass das Textfeld mit der Bezeichnung "Autohersteller" die Eigenschaft "Hersteller" des Präsentators anzeigen muss.
Sie können dann viele verschiedene Arten von Presentern an die Ansicht binden, alle müssen die Eigenschaft Maker haben - es kann ein Flugzeug, ein Zug oder was auch immer sein, der Ansicht ist das egal. Die Ansicht bezieht Daten aus dem Präsentator - egal welcher - solange er eine vereinbarte Schnittstelle implementiert.
Dieses Bindungs-Framework ist, wenn man es zerlegt, eigentlich der Controller :-)
Sie können MVP also als eine Weiterentwicklung von MVC betrachten.
MVC ist toll, aber das Problem ist, dass in der Regel seine Controller pro Ansicht. Controller A weiß, wie man Felder von View A einstellt. Wenn Sie nun wollen, dass View A Daten von Modell B anzeigt, müssen Sie Controller A das Modell B kennen, oder Sie brauchen Controller A, um ein Objekt mit einer Schnittstelle zu erhalten - was wie MVP ist, nur ohne die Bindungen, oder Sie müssen den UI-Set-Code in Controller B neu schreiben.
Fazit - MVP und MVC sind beide von UI-Mustern entkoppelt, aber MVP verwendet in der Regel ein Bindungs-Framework, das MVC zugrunde liegt. Dementsprechend ist MVP auf einer höheren architektonischen Ebene als MVC und ein Wrapper-Muster über MVC.
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