Различия MV* паттернах

MVC

MVC-Process.png
  • Модель (Model) предоставляет данные и реагирует на команды контроллера, изменяя своё состояние.
  • Представление (View) отвечает за отображение данных модели пользователю, реагируя на изменения модели.
  • Контроллер (Controller) интерпретирует действия пользователя, оповещая модель о необходимости изменений.

MVP

MVP-Pattern.png
  • Модель (Model) — хранит в себе всю бизнес-логику, при необходимости получает данные из хранилища.
  • Представление (View) — реализует отображение данных, обращается к Presenter за обновлениями. Пользователь может взаимодействовать с ее элементами, но когда какое-нибудь событие виджета будет затрагивать логику интерфейса, представление будет направлять его презентеру.
  • Презентер (Presenter) — реализует взаимодействие между Моделью и Видом. Когда представление уведомляет презентер, что пользователь что-то сделал (например, нажал кнопку), презентер принимает решение об обновлении модели и синхронизирует все изменения между моделью и представлением. Презентер не общается с представлением напрямую. Вместо этого, он общается через интерфейс. Благодаря этому презентер и модель могут быть протестированы по отдельности.

MVVM

MVVMPattern.png
  • Модель (Model) представляет собой логику работы с данными и описание фундаментальных данных, необходимых для работы приложения.
  • Представление (View) — Выступает подписчиком на событие изменения значений свойств предоставляемых Моделью Представления. В случае, если в Модели Представления изменилось какое-либо свойство, то она оповещает всех подписчиков об этом, и Представление, в свою очередь, запрашивает обновлённое значение свойства из Модели Представления. В случае, если пользователь воздействует на какой-либо элемент интерфейса, Представление вызывает соответствующую команду, предоставленную Моделью Представления.
  • Модель Представления (ViewModel) — с одной стороны, абстракция Представления, а с другой — обёртка данных из Модели, подлежащие связыванию. То есть, она содержит Модель, преобразованную к Представлению, а также команды, которыми может пользоваться Представление, чтобы влиять на Модель.