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

Много слов уже сказано по поводу этого, но соль из всех сравнений вынести не получается. Прошу помочь разобраться с конкретными вопросами:
"В MVC controller сам выбирает, какое представление будет отображаться. В MVP presenter просто обновляет view новыми данными".
1) Правильно я понимаю, что контроллер напрямую инжектит/удаляет DOM узлы, тем самым осуществляется управление отображаемым view. Подойдет ли в таком случае пример с роутером: controller в зависимости от изменения пути отрисовывается разные страницы?
  • 1.1) Если это так, то получается, контроллер должен иметь ссылки на экземпляры всех view? Ибо говорится, несколько view могут работать с одним controller.
  • 1.2) Если это не правда, то получается, что controller просто обновляет данные во отрисованном view. Presenter тоже обновляет данные во view. В чем тогда отличие controller от presenter?
  • Вопрос задан
  • 283 просмотра
Пригласить эксперта
Ответы на вопрос 1
@GLeBaTi
Разница между подходами в том, каким образом связываются команды пользователи и обработчики.

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.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы