Чем все-таки отличается MVC от MVP?
=====================================

 Много слов уже сказано по поводу этого, но соль из всех сравнений вынести не получается. Прошу помочь разобраться с конкретными вопросами:  

"В MVC controller сам выбирает, какое представление будет отображаться. В MVP presenter просто обновляет view новыми данными".  

1) Правильно я понимаю, что контроллер напрямую инжектит/удаляет DOM узлы, тем самым осуществляется управление отображаемым view. Подойдет ли в таком случае пример с роутером: controller в зависимости от изменения пути отрисовывается разные страницы?  

* 1.1) Если это так, то получается, контроллер должен иметь ссылки на экземпляры всех view? Ибо говорится, несколько view могут работать с одним controller.
* 1.2) Если это не правда, то получается, что controller просто обновляет данные во отрисованном view. Presenter тоже обновляет данные во view. В чем тогда отличие controller от presenter?

 

 Разница между подходами в том, каким образом связываются **команды пользователи** и **обработчики**.  

  

**MVC** - когда пользователь дает команды не View, а контроллеру (т.е. View не имеет как-таковой логики)  

(пример=ASPX: статическая html страница - это View, а http-запросы идут в контроллер (на сервере))  

  

**MVP** - когда пользователь взаимодействует с View, а View взаимодействует с Presenter-ом напрямую.  

(пример=winForms: форма - это View, при нажатии кнопки вызывается код из Form.cs(Presenter)  

  

**MVVM** - когда пользователь взаимодействует с View, а View через биндинги взаимодействует с VM  

(пример=WPF: форма - это View. при нажатии кнопки взаимодействие с кодом происходит через биндинги)  

  

По крайней мере я так понял :)  

  

По вашему вопросу: и Controller и Presenter меняют представление. Разница в том, что в первом случае представление никак не взаимодействует с Controller-ом (ajax не в счёт), а во втором - взаимодействует напрямую.  

  

Могу предположить, что если в сайте есть ajax, который связывает представление с контроллером, то это уже не MVC, а MVP.