2346 Stimmen

Was sind MVP und MVC und worin besteht der Unterschied?

Beim Blick über den Tellerrand RAD (Ziehen und Konfigurieren) bei der Erstellung von Benutzeroberflächen, die von vielen Tools unterstützt werden, werden Sie wahrscheinlich auf drei Entwurfsmuster stoßen, die Modell-Ansichts-Steuerung , Modell-Ansicht-Präsentator y Model-View-ViewModel . Meine Frage besteht aus drei Teilen:

  1. Welche Themen werden in diesen Mustern angesprochen?
  2. Inwiefern sind sie sich ähnlich?
  3. Wie unterscheiden sie sich?

6 Stimmen

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...

7voto

Hibou57 Punkte 6352

Meine bescheidene Kurzansicht: MVP ist für große Maßstäbe, und MVC für kleine Maßstäbe. Bei MVC habe ich manchmal das Gefühl, dass das V und das C als zwei Seiten einer einzigen unteilbaren Komponente gesehen werden können, die direkt an M gebunden ist, und man fällt unweigerlich darauf zurück, wenn man zu kleineren Maßstäben wie UI-Steuerelementen und Basis-Widgets hinuntergeht. Auf dieser Ebene der Granularität, MVP macht wenig Sinn. Wenn man dagegen zu größeren Maßstäben übergeht, wird die richtige Schnittstelle wichtiger, ebenso wie die eindeutige Zuweisung von Verantwortlichkeiten, und hier kommt MVP ins Spiel.

Andererseits kann diese Faustregel sehr wenig Gewicht haben, wenn die Plattformeigenschaften eine Art von Beziehungen zwischen den Komponenten begünstigen, wie beim Web, wo es einfacher zu sein scheint, MVC zu implementieren, als MVP.

7voto

Jeremiah Flaga Punkte 4423

Ich denke, dieses Bild von Erwin Vandervalk (und das dazugehörige artículo ) ist die beste Erklärung für MVC, MVP und MVVM, ihre Ähnlichkeiten und Unterschiede. Die artículo erscheint nicht in den Suchmaschinenergebnissen für Suchanfragen zu "MVC, MVP und MVVM", weil der Titel des Artikels nicht die Wörter "MVC" und "MVP" enthält; aber es ist die beste Erklärung, denke ich.

image explaining MVC, MVP and MVVM - by Erwin Vandervalk

(Die artículo stimmt auch mit dem überein, was Onkel Bob Martin in einem seiner Vorträge sagte: dass MVC ursprünglich für die kleinen UI-Komponenten und nicht für die Architektur des Systems entwickelt wurde)

6voto

Mostafa Wael Punkte 883

MVC (Model-View-Controller)

In MVC ist der Controller derjenige, der das Sagen hat! Der Controller wird ausgelöst oder auf der Grundlage einiger Ereignisse/Abfragen zugegriffen und verwaltet dann die Ansichten.

Ansichten in MVC sind praktisch zustandslos, der Controller ist für die Auswahl der anzuzeigenden Ansicht verantwortlich.

Z.B.: Wenn der Benutzer auf die Schaltfläche "MeinProfil anzeigen" klickt, wird der Controller ausgelöst. Er kommuniziert mit dem Modell, um die entsprechenden Daten zu erhalten. Dann zeigt er eine neue Ansicht an, die der Profilseite ähnelt. Der Controller kann die Daten vom Modell übernehmen und sie direkt an die Ansicht weiterleiten - wie im obigen Diagramm vorgeschlagen - oder die Ansicht die Daten vom Modell selbst abrufen lassen.

MVP (Modell-Ansicht-Präsentator)

In MVP ist die Ansicht derjenige, der das Sagen hat! Jede Ansicht ruft ihren Presenter auf oder hat einige Ereignisse, auf die der Presenter hört.

Views in MVP implementieren keine Logik, der Presenter ist für die Implementierung der gesamten Logik verantwortlich und kommuniziert mit der View über eine Art Schnittstelle.

Z.B.: Wenn der Benutzer auf die Schaltfläche "Speichern" klickt, delegiert der Event-Handler in der Ansicht an die Methode "OnSave" des Presenters. Der Präsentator führt die erforderliche Logik und die erforderliche Kommunikation mit dem Modell aus und ruft dann die Ansicht über seine Schnittstelle zurück, so dass die Ansicht anzeigen kann, dass das Speichern abgeschlossen ist.

MVC vs. MVP

  • Bei MVC hat nicht die Ansicht das Sagen, sondern die Ansichten fungieren als Sklaven, die der Controller verwalten und steuern kann.
  • In MVC sind Views zustandslos, im Gegensatz zu Views in MVP, wo sie zustandsabhängig sind und sich mit der Zeit ändern können.
  • In MVP haben Ansichten keine Logik und wir sollten sie so dumm wie möglich halten. Auf der anderen Seite, Ansichten in MVC kann eine Art von Logik haben.
  • In MVP ist der Presenter von der View entkoppelt und spricht mit ihr über eine Schnittstelle. Dies ermöglicht das Mocking der View in Unit-Tests.
  • In MVP sind die Ansichten vollständig vom Modell isoliert. In MVC können Views jedoch mit dem Model kommunizieren, um es mit den aktuellsten Daten zu versorgen. Daten auf dem neuesten Stand zu halten.

enter image description here

6voto

onmyway133 Punkte 42296

Es gibt viele Versionen von MVC, in dieser Antwort geht es um das ursprüngliche MVC in Smalltalk. Kurz gesagt, es ist image of mvc vs mvp

Dieses Gespräch droidcon NYC 2017 - Sauberes App-Design mit Architekturkomponenten klärt es

enter image description here enter image description here

6 Stimmen

In der MVC wird das Modell nie direkt von der Ansicht aufgerufen

5 Stimmen

Dies ist eine ungenaue Antwort. Lassen Sie sich nicht in die Irre führen. Wie @rodi schreibt, gibt es keine Interaktion zwischen der Ansicht und dem Modell.

0 Stimmen

Das MVC-Bild ist ungenau oder bestenfalls irreführend, bitte beachten Sie diese Antwort nicht.

5voto

stdout Punkte 2111

Hay ce schönes Video von Onkel Bob, in dem er kurz erklärt MVC & MVP am Ende.

IMO, MVP ist eine verbesserte Version von MVC, wo Sie im Grunde trennen die Sorge, was Sie gonna zeigen (die Daten) aus, wie Sie gonna zeigen (die Ansicht) sind. Der Presenter enthält sozusagen die Geschäftslogik Ihrer Benutzeroberfläche, gibt implizit vor, welche Daten dargestellt werden sollen und gibt Ihnen eine Liste von dummen View-Modellen. Und wenn es an der Zeit ist, die Daten zu zeigen, stecken Sie einfach Ihren View (der wahrscheinlich die gleichen Ids enthält) in Ihren Adapter und setzen die relevanten View-Felder mit diesen View-Modellen mit einem Minimum an Code (nur mit Settern). Der Hauptvorteil ist, dass Sie Ihre UI-Geschäftslogik mit vielen/verschiedenen Views testen können, wie z.B. das Anzeigen von Elementen in einer horizontalen oder vertikalen Liste.

In MVC sprechen wir über Schnittstellen (Grenzen), um verschiedene Schichten zu verbinden. Ein Controller ist ein Plug-in für unsere Architektur, aber er hat keine solche Einschränkung, die vorschreibt, was er zeigen soll. In diesem Sinne ist MVP eine Art von MVC mit einem Konzept von Ansichten, die über Adapter an den Controller angeschlossen werden können.

Ich hoffe, das hilft Ihnen weiter.

3 Stimmen

Ein wichtiger Punkt von Onkel Bob: Als MVC ursprünglich von Trygve Reenskaug erfunden wurde, war es gedacht für jedes Widget nicht das gesamte Formular.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X