Wenn wir Google mit dem Ausdruck "Was ist der Unterschied zwischen MVC-, MVP- und MVVM-Entwurfsmuster" durchsuchen, erhalten wir möglicherweise einige URLs, die den Unterschied zwischen MVC MVP- und MVVM-Entwurfsmuster theoretisch wie folgt diskutieren :
MVP
Verwendung in Situationen, in denen eine Bindung über einen Datenkontext nicht möglich ist. Windows Forms ist ein perfektes Beispiel dafür. Um die Ansicht vom Modell zu trennen, wird ein Präsentator benötigt. Da die Ansicht nicht direkt an den Präsentator gebunden werden kann, müssen Informationen über eine Schnittstelle (IView) an die Ansicht übergeben werden.
MVVM
Verwendung in Situationen, in denen eine Bindung über einen Datenkontext möglich ist. Warum? Die verschiedenen IView-Schnittstellen für jede Ansicht werden entfernt, was bedeutet, dass weniger Code gewartet werden muss. Einige Beispiele, bei denen MVVM möglich ist, umfassen WPF- und Javascript-Projekte mit Knockout.
MVC
Verwendung in Situationen, in denen die Verbindung zwischen der Ansicht und dem Rest des Programms nicht immer verfügbar ist (und Sie MVVM oder MVP nicht effektiv einsetzen können). Dies beschreibt klar die Situation, in der eine Web-API von den an die Client-Browser gesendeten Daten getrennt ist. Microsoft ASP.NET MVC ist ein großartiges Tool zum Verwalten solcher Situationen und bietet ein sehr klares MVC-Framework
Ich habe jedoch keinen einzigen Artikel gefunden, in dem der Unterschied theoretisch zusammen mit dem Beispielcode erörtert wird.
Es wäre wirklich schön, wenn ich einen Artikel bekommen würde, der den Unterschied zwischen diesen 3 Entwurfsmustern (MVC, MVP & MVVM) zusammen mit Code beschreibt.
Ich möchte den Quellcode von 3 ähnlichen CRUD- Apps in die Hände bekommen , die von diesen drei Entwurfsmustern (MVC, MVP & MVVM) implementiert wurden. Damit ich den Code durchgehen und verstehen kann, wie man Code für diese drei Entwurfsmuster (MVC, MVP & MVVM) schreiben soll.
Wenn es also einen solchen Artikel gibt, in dem erläutert wird, wie Code für diese drei Entwurfsmuster (MVC, MVP und MVVM) anders aussehen würde, leiten Sie mich bitte zu diesem Artikel weiter.
Antworten:
Einige grundlegende Unterschiede können kurz geschrieben werden:
MVC:
Traditionelle MVC ist, wo es eine gibt
MVP:
Ähnlich wie bei herkömmlicher MVC, jedoch wird Controller durch Presenter ersetzt. Im Gegensatz zum Controller ist der Präsentator jedoch auch für die Änderung der Ansicht verantwortlich. Die Ansicht ruft normalerweise nicht den Präsentator an.
MVVM
Der Unterschied besteht darin, dass das Ansichtsmodell vorhanden ist. Es ist eine Art Implementierung des Observer Design Pattern, bei der Änderungen im Modell auch in der Ansicht von der VM dargestellt werden. Beispiel: Wenn ein Schieberegler geändert wird, wird nicht nur das Modell aktualisiert, sondern auch die Daten, bei denen es sich möglicherweise um einen Text handelt, der in der Ansicht angezeigt wird, werden aktualisiert. Es gibt also eine bidirektionale Datenbindung.
quelle
MVC, MVP, MVVM
MVC (alte)
MVP (aufgrund seiner geringen Kopplung modularer. Presenter ist ein Vermittler zwischen Ansicht und Modell)
MVVM (Sie haben bereits eine bidirektionale Bindung zwischen VM und UI-Komponente, daher ist diese automatisierter als MVP.)
Ein anderes Bild:
quelle
Tolle Erklärung vom Link: http://geekswithblogs.net/dlussier/archive/2009/11/21/136454.aspx
Schauen wir uns zuerst MVC an
Die Eingabe richtet sich zuerst an den Controller, nicht an die Ansicht. Diese Eingabe kann von einem Benutzer stammen, der mit einer Seite interagiert, aber auch von der einfachen Eingabe einer bestimmten URL in einen Browser. In beiden Fällen handelt es sich um einen Controller, mit dem eine Schnittstelle verbunden ist, um einige Funktionen zu starten.
Zwischen dem Controller und der Ansicht besteht eine Eins-zu-Eins-Beziehung. Dies liegt daran, dass ein einzelner Controller je nach ausgeführter Operation unterschiedliche Ansichten zum Rendern auswählen kann.
Es gibt einen Einwegpfeil vom Controller zur Ansicht. Dies liegt daran, dass die Ansicht keine Kenntnis von oder keinen Verweis auf den Controller hat.
Der Controller gibt das Modell zurück, sodass zwischen der Ansicht und dem erwarteten Modell, das an das Modell übergeben wird, Kenntnisse bestehen, nicht jedoch zwischen dem Controller, der es bereitstellt.
MVP - Model View Presenter
Schauen wir uns nun das MVP-Muster an. Es sieht MVC sehr ähnlich, mit Ausnahme einiger wichtiger Unterschiede:
Die Eingabe beginnt mit der Ansicht, nicht mit dem Präsentator.
Zwischen der Ansicht und dem zugehörigen Präsentator besteht eine Eins-zu-Eins-Zuordnung.
Die Ansicht enthält einen Verweis auf den Präsentator. Der Präsentator reagiert auch auf Ereignisse, die von der Ansicht ausgelöst werden, sodass er die Ansicht kennt, mit der er verknüpft ist.
Der Präsentator aktualisiert die Ansicht basierend auf den angeforderten Aktionen, die er für das Modell ausführt, aber die Ansicht ist nicht modellbewusst.
MVVM - Modellansicht Ansichtsmodell
Schauen wir uns also mit den MVC- und MVP-Mustern vor uns das MVVM-Muster an und sehen Sie, welche Unterschiede es enthält:
Die Eingabe beginnt mit der Ansicht, nicht mit dem Ansichtsmodell.
Während die Ansicht einen Verweis auf das Ansichtsmodell enthält, enthält das Ansichtsmodell keine Informationen zur Ansicht. Aus diesem Grund ist es möglich, eine Eins-zu-Viele-Zuordnung zwischen verschiedenen Ansichten und einem Ansichtsmodell vorzunehmen - auch über Technologien hinweg. Beispielsweise können eine WPF-Ansicht und eine Silverlight-Ansicht dasselbe Ansichtsmodell verwenden.
quelle
Das Bild unten stammt aus dem Artikel von Erwin van der Valk:
Der Artikel erklärt die Unterschiede und enthält einige Codebeispiele in C #
quelle