Was ist der Unterschied zwischen dem Controller in MVC und ViewModel in MVVM?

21

Ich kann den Unterschied zwischen MVC und MVVM nicht klar erkennen. Ich glaube, der Befehl in einem ViewModel ist genau wie die Action-Methode in einem Controller. Sowohl der Controller als auch ViewModel benachrichtigen die Ansicht, dass sie sich selbst aktualisiert, nachdem der Status des Modells durch Datenbindung geändert wurde. Was ist der Hauptunterschied zwischen den beiden Mustern?

TomCaps
quelle

Antworten:

25

Der Controller und das ViewModel unterscheiden sich in verschiedener Hinsicht.

In MVC kennt der Controller die Ansicht, er kann die Ansicht ändern. Es kennt auch das Modell und kann es aufrufen. In MVVM ist ein ViewModel eine abstrakte Darstellung der Ansicht und kennt die konkrete Benutzeroberfläche nicht. Das Modell wird so verpackt, dass es wie gewünscht angezeigt werden kann.

In der klassischen MVC ist ein Controller nur eine Strategie der Ansicht zur Interaktion mit dem Modell. In der Tat ist manchmal ein Controller nicht einmal notwendig. In MVVM benötigen Sie es nicht, da Sie für dieselbe Ansicht unterschiedliche ViewModels verwenden können, wenn Sie unterschiedliche Verhaltensweisen benötigen. In MVC könnten Sie zum Beispiel einen ReadOnlyController oder einen AdminController haben, um mit dem Modell zu kommunizieren. In MVVM könnten Sie nur zwei ViewModels haben und das auswählen, das Sie für die Ansicht benötigen.

Aber sie haben einige Ähnlichkeiten. In beiden Mustern ist die Ansicht ein Beobachter . In der klassischen MVC ist die Ansicht ein Beobachter des Modells, in der MVVM ein Beobachter des ViewModel.

Beide Muster sollen eine Trennung der Anliegen bewirken. MVVM zielt in erster Linie darauf ab, eine Abstraktion der Ansicht bereitzustellen, die völlig unabhängig von der verwendeten UI-Technologie ist. MVC geht nicht so weit. Das Hauptaugenmerk liegt auf der Trennung von Bedenken, damit Sie die Geschäftslogik (das Modell) nicht in die Ansicht einbeziehen.

Vielleicht finden Sie meine Antwort auf eine ähnliche Frage auch hilfreich.

Zum Schluss sollte ich sagen, dass beide Muster zur selben Familie gehören. MVP, von dem MVVM abstammt, ist ein Geschwister von MVC. Wenn Sie mehr wissen möchten, folgen Sie diesem Link zu Martin Fowlers Website , er erklärt alles im Detail.

Falke
quelle
Glauben Sie nicht, dass diese Modellansichtsarchitekturen von den Leuten, die sie implementieren, am besten verstanden werden. Ich glaube, es ist eine Frage der Wahl für den Entwickler. Man wählt MVC oder MVVM, je nachdem, ob man eine vollständige Abstraktion über die Ansicht mit ein wenig Aufwand wünscht (im Fall von MVVM).
Pankaj Upadhyay
@Pankaj Upadhyay: Welche Sie verwenden sollten, hängt von Ihren Anforderungen und der Auswahl der Technologie sowie den Besonderheiten Ihrer Plattform ab.
Falcon
Ich glaube, dass MVC-Architektur für alles gut genug ist, aber das könnte daran liegen, dass ich nicht auf ein Problem gestoßen bin, für das MVVM besonders erforderlich war. IMO, Sie müssen auf jeden Fall etwas Kontrolle über die Ansicht haben, denn wenn Sie sie absolut locker machen, werden bei zukünftigen Upgrades mehr Fehler auftreten
Pankaj Upadhyay,
1
@Pankaj Upadhyay: Wenn Sie dieselbe Logik für verschiedene UI-Technologien verwenden möchten, ist MVP überlegen. Ich glaube nicht, dass Sie unbedingt die Kontrolle über die Ansicht benötigen. Es kann völlig unabhängig sein und Sie können die ViewModels genauso gut testen - wenn nicht sogar besser. Die bessere Trennung kommt auch Designern zugute, da die Arbeit am Projekt besser aufgeteilt werden kann.
Falcon