Контроллер и ViewModel отличаются по-разному.
В MVC Контроллер знает вид, он может изменить вид. Он также знает модель и может ее назвать. В MVVM ViewModel является абстрактным представлением View и не знает конкретного пользовательского интерфейса, он оборачивает модель таким образом, чтобы ее можно было отображать по желанию.
В классическом MVC контроллер - это просто стратегия представления для взаимодействия с моделью. На самом деле, иногда контроллер даже не нужен. В MVVM вам это не нужно, поскольку у вас могут быть разные ViewModel для одного и того же View, если вам нужно другое поведение. В MVC вы можете иметь, например, ReadOnlyController или AdminController для связи с моделью. В MVVM у вас может быть только две модели представления, и вы выбираете ту, которая вам нужна для просмотра.
Но у них есть некоторые сходства. В обоих шаблонах View является наблюдателем . В классическом MVC представление является наблюдателем модели, в MVVM - наблюдателем ViewModel.
Обе модели предназначены для обеспечения разделения интересов. MVVM в первую очередь стремится предоставить абстракцию View, полностью независимую от используемой технологии пользовательского интерфейса. MVC не заходит так далеко. Основное внимание уделяется разделению интересов, чтобы вы не помещали бизнес-логику (модель) в представление.
Вы также можете найти этот мой ответ на аналогичный вопрос полезным.
Наконец, я должен сказать, что оба образца принадлежат одной семье. MVP, из которых MVVM является потомком, является братом MVC. Если вы хотите узнать больше, перейдите по этой ссылке на сайт Мартина Фаулера , он объяснит все подробно.