Gymterview
junior

В чём различия паттернов MVC, MVP и MVVM

MVC, MVP и MVVM — три паттерна разделения представления (UI) и логики приложения, различающиеся способом организации взаимодействия между компонентами.

MVC (Model-View-Controller)

Пример
         Пользователь
              │
              ▼
        ┌────────────┐
        │ Controller │ ← Обрабатывает запрос, управляет потоком
        └──┬─────┬───┘
           │     │
     update│     │select view
           ▼     ▼
     ┌───────┐ ┌──────┐
     │ Model │ │ View │ ← View может читать из Model напрямую
     └───────┘ └──────┘
  • Model — данные и бизнес-логика.
  • View — отображение данных пользователю.
  • Controller — принимает входные данные от пользователя, управляет Model и выбирает View.

В Spring MVC: @Controller принимает HTTP-запрос, вызывает сервис (Model), возвращает имя представления (View).

MVP (Model-View-Presenter)

Пример
     ┌──────┐        ┌───────────┐        ┌───────┐
     │ View │◄──────▶│ Presenter │◄──────▶│ Model │
     └──────┘        └───────────┘        └───────┘
  • View — пассивно отображает данные. Только делегирует действия Presenter-у.
  • Presenter — содержит логику представления, обновляет View через интерфейс.
  • View и Model не знают друг о друге. Presenter — единственный посредник.

MVVM (Model-View-ViewModel)

Пример
     ┌──────┐  data binding  ┌───────────┐        ┌───────┐
     │ View │◄══════════════▶│ ViewModel │◄──────▶│ Model │
     └──────┘                └───────────┘        └───────┘
  • ViewModel — абстракция View, предоставляющая данные и команды.
  • Связь View и ViewModel осуществляется через data binding (двусторонняя привязка данных).
  • Используется в JavaFX, Angular, WPF.

Сравнительная таблица

Аспект MVC MVP MVVM
Связь View-Model View может читать Model Через Presenter Через data binding
Тестируемость Средняя Высокая Высокая
Сложность Низкая Средняя Высокая
Типичное применение Web (Spring MVC) Desktop, Android JavaFX, SPA-фреймворки

Вывод

В серверных Java-приложениях чаще всего используется MVC (Spring MVC для серверной части) в сочетании с REST API и отдельным фронтенд-приложением. MVP и MVVM более характерны для клиентских приложений с богатым UI.

На собеседовании: Интервьюер проверяет понимание ключевого различия: в MVC View знает о Model, в MVP — нет (Presenter посредник), в MVVM связь через data binding. Частая ошибка — не знать, какой паттерн применяется в Spring MVC и чем он отличается от классического MVC.