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.