Kontroler i ViewModel różnią się na różne sposoby.
W MVC kontroler zna widok, może zmienić widok. Zna również model i może go nazwać. W MVVM ViewModel jest abstrakcyjną reprezentacją widoku i nie zna konkretnego interfejsu użytkownika, otacza model w taki sposób, aby można go było wyświetlać zgodnie z potrzebami.
W klasycznym MVC kontroler jest tylko strategią widoku do interakcji z modelem. W rzeczywistości czasami kontroler nie jest nawet potrzebny. W MVVM nie potrzebujesz go, ponieważ możesz mieć różne ViewModels dla tego samego Widoku, jeśli potrzebujesz różnych zachowań. W MVC możesz na przykład mieć ReadOnlyController lub AdminController do komunikacji z modelem. W MVVM możesz mieć tylko dwa modele ViewModels i wybierasz ten, którego potrzebujesz do widoku.
Ale mają pewne podobieństwa. W obu wzorach Widok jest obserwatorem . W klasycznym MVC widok jest obserwatorem modelu, w MVVM jest obserwatorem modelu ViewModel.
Oba wzorce mają na celu rozdzielenie obaw. MVVM ma przede wszystkim zapewnić abstrakcję widoku, całkowicie niezależną od używanej technologii interfejsu użytkownika. MVC nie posuwa się tak daleko. Skupia się przede wszystkim na oddzieleniu problemów, aby nie wyświetlać logiki biznesowej (modelu).
Pomocna może być również moja odpowiedź na podobne pytanie.
W końcu powinienem powiedzieć, że oba wzorce należą do tej samej rodziny. MVP, którego potomkiem jest MVVM, jest rodzeństwem MVC. Jeśli chcesz dowiedzieć się więcej, skorzystaj z tego linku do strony Martina Fowlera , on wyjaśnia wszystko szczegółowo.