it-swarm.com.de

Was ist der Unterschied zwischen MVC-, MVP- und MVVM-Entwurfsmustern in Bezug auf die Codierung von c #?

Wenn wir in Google nach dem Begriff "Was ist der Unterschied zwischen MVC, MVP und MVVM-Entwurfsmuster" suchen, erhalten wir möglicherweise einige URLs, in denen der Unterschied zwischen MVC, MVP und MVVM-Entwurfsmuster theoretisch besprochen wird =:

[~ # ~] 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 wurden entfernt, sodass weniger Code verwaltet werden muss. Einige Beispiele, in 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 deutlich die Situation, in der eine Web-API von den an die Client-Browser gesendeten Daten getrennt ist. Die ASP.NET-MVC von Microsoft ist ein hervorragendes Tool für die Verwaltung solcher Situationen und bietet ein sehr klares MVC-Framework


Aber ich habe keinen einzigen Artikel gefunden, der den Unterschied theoretisch zusammen mit Beispielcode behandelt.

Es wäre wirklich schön, wenn ich einen Artikel bekommen würde, in dem der Unterschied zwischen diesen drei Entwurfsmustern (MVC, MVP & MVVM) zusammen mit Code behandelt wird.

Ich möchte mir Quellcode von 3 ähnlichen [~ # ~] rohen [~ # ~] Apps besorgen, die von diesen implementiert wurden drei Entwurfsmuster (MVC, MVP & MVVM). Damit ich den Code durchgehen und verstehen kann, wie man Code für diese drei Designmuster (MVC, MVP & MVVM) schreiben sollte.

Wenn es also einen solchen Artikel gibt, in dem erläutert wird, wie der Code für diese drei Entwurfsmuster (MVC, MVP und MVVM) anders aussehen würde, leiten Sie mich bitte zu diesem Artikel weiter.

187
Thomas

Dies sollte ein guter Starter sein. In Wirklichkeit spielt die von Ihnen gewählte "Plattform" auch eine große Rolle bei der Verwendung dieser Muster. Beispielsweise eignet sich MVVM natürlich für WPF, während MVP gut mit Windows Forms zusammenarbeitet. ASP.Net MVC spricht für sich.

60
David Osborne

Einige grundlegende Unterschiede können kurz geschrieben werden:

MVC:

Traditionelle MVC ist, wo es eine gibt

  1. Modell: Dient als Modell für Daten
  2. Ansicht: Kümmert sich um die Ansicht des Benutzers, bei der es sich um die Benutzeroberfläche handeln kann
  3. Controller: Steuert die Interaktion zwischen Model und View, wobei View den Controller aufruft, um das Modell zu aktualisieren. View kann bei Bedarf mehrere Controller aufrufen.

MVP:

Ähnlich wie bei der herkömmlichen MVC, jedoch wird der Controller durch den Presenter ersetzt. Im Gegensatz zum Controller ist der Presenter jedoch auch für die Änderung der Ansicht verantwortlich. Die Ansicht ruft den Moderator normalerweise nicht an.

MVVM

Der Unterschied ist das Vorhandensein von View Model. Dies ist eine Art Implementierung des Observer-Entwurfsmusters, bei der Änderungen im Modell auch in der Ansicht durch die 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. Es gibt also eine bidirektionale Datenbindung.

90
Pritam Banerjee

MVC, MVP, MVVM

MVC (alte)

MVP (modularer aufgrund seiner geringen Kopplung. Presenter ist ein Mittler zwischen Ansicht und Modell)

MVVM (Sie haben bereits eine bidirektionale Bindung zwischen VM und UI-Komponente, daher ist diese automatisierter als MVP) enter image description here

Ein anderes Bild: enter image description here

33
Uddhav Gautam

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, sie kann jedoch auch einfach durch die Eingabe einer bestimmten URL in einen Browser erfolgen. In beiden Fällen handelt es sich um einen Controller, an den eine Schnittstelle angeschlossen ist, um einige Funktionen zu aktivieren.

Zwischen dem Controller und der Ansicht besteht eine 1: 1-Beziehung. Dies liegt daran, dass ein einzelner Controller abhängig von der ausgeführten Operation möglicherweise unterschiedliche Ansichten zum Rendern auswählt.

Es gibt einen Einwegpfeil vom Controller zur Ansicht. Dies liegt daran, dass die Ansicht keine Kenntnis von oder keinen Bezug zu der Steuerung hat.

Der Controller gibt das Modell zurück, sodass zwischen der Ansicht und dem erwarteten Modell, das an ihn ü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, abgesehen von einigen wichtigen Unterschieden:

Die Eingabe beginnt mit der Ansicht, nicht mit dem Präsentator.

Es gibt eine Eins-zu-Eins-Zuordnung zwischen der Ansicht und dem zugeordneten Präsentator.

Die Ansicht enthält einen Verweis auf den Präsentator. Der Presenter reagiert auch auf Ereignisse, die von der Ansicht ausgelöst werden, sodass er die Ansicht kennt, mit der er verbunden ist.

Der Presenter aktualisiert die Ansicht basierend auf den angeforderten Aktionen, die er für das Modell ausführt, aber die Ansicht erkennt das Modell nicht.

MVVM - Modellansicht Modell anzeigen

Schauen wir uns also mit den MVC- und MVP-Mustern vor uns das MVVM-Muster an und sehen Sie, welche Unterschiede es aufweist:

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 über die Ansicht. Dies ist der Grund, warum es möglich ist, eine Eins-zu-Viele-Zuordnung zwischen verschiedenen Ansichten und einem Ansichtsmodell durchzuführen - auch über Technologien hinweg. Beispielsweise können eine WPF-Ansicht und eine Silverlight-Ansicht dasselbe Ansichtsmodell verwenden.

32
taha027

Das folgende Bild stammt aus dem Artikel , geschrieben von Erwin van der Valk:

image explaining MVC, MVP and MVVM - by Erwin Vandervalk

Der Artikel erklärt die Unterschiede und gibt einige Codebeispiele in C #

2
Jboy Flaga