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.