MVC прижился в веб-приложениях во многом потому, что он отлично справляется со сценарием запрос-ответ.
Основная черта такого сценария — короткое время жизни View. Приходит запрос, который передается на соответствующий контроллер, он инициирует какие-то процессы в модели, а затем создается View, который просто заполняется данными из модели и передается клиенту в браузер. Все в один проход.
Когда появился Ajax и богатые клиент-сайд приложения (RIA), оказалось, что MVC не очень хорошо подходит для работы с областями страницы или приложения, что привело к несколько иным моделям: MVP (Model View Presenter) и затем к MVVM (Model View ViewModel).
Первоначально MVVM был описан для Silverlight и имеет преимущества для сложных интерфейсов с определенной логикой, которая отличается от логики приложения. MVVM отличается более «тесной» связью между Моделью и Представлением посредством слоя Представление-Модель, который синхронизирует данные как при событии на стороне Модели, так и на стороне Представления.
В MVC логика помещается в Моделях, ее можно также помещать в Контроллер, но это справедливо подвергается критике, т.к. помещая логику в контроллер, мы получаем стандартный MVC. В MVVM, напротив, логика помещается в «промежуточный» слой ViewModel.
Для HTML схема MVVM особо удачна благодаря DOM, который, как известно, вполне может вмещать данные. Модель данных предоставленна сервером. Есть Представление в виде DOM, в виде html-разметки. А есть Представление-Модель, которая описывает изменение Представления, связывает Модель и Представление, причем синхронизует эту связь.
Существует и другие MV-подобные шаблоны, .
--