Паттерны проектирования MVC (Model-View-Controller) и MVP (Model-View-Presenter)
MVC (Model-View-Controller) и MVP (Model-View-Presenter) — это архитектурные паттерны, которые помогают организовать код в больших приложениях. Они разделяют логику приложения на отдельные компоненты, что делает его более понятным, поддерживаемым и тестируемым.
MVC (Model - View - Controller)
Model-View-Controller — один из самых популярных паттернов. Он делит приложение на три слоя:
Model
- Отвечает за данные и бизнес-логику.
- Получает и обрабатывает данные (например, из API или базы данных).
View
- Отвечает за отображение данных пользователю.
- Не содержит логики, кроме UI.
Controller
- Связывает View и Model.
- Обрабатывает пользовательские действия и обновляет модель или представление.
Пример потока данных:
Пользователь ➜ View ➜ Controller ➜ Model ➜ Controller ➜ View
Особенности MVC:
- View может запрашивать данные напрямую у модели.
- Контроллер «реагирует» на действия пользователя.
MVP (Model - View - Presenter)
Model-View-Presenter — это эволюция MVC, которая облегчает тестирование и сильнее изолирует View.
Model
- Та же, что и в MVC — управляет данными и бизнес-логикой.
View
- Отвечает только за отображение и имеет минимальную логику.
- Ничего не знает о модели.
Presenter
- Управляет логикой между View и Model.
- Сам получает данные из Model и передаёт их View.
- View и Presenter связаны интерфейсами, что упрощает тестирование Presenter без UI.
Пример потока данных:
Пользователь ➜ View ➜ Presenter ➜ Model ➜ Presenter ➜ View
Сравнение MVC vs MVP
| Характеристика | MVC | MVP |
|---|---|---|
| Кто управляет логикой? | Controller | Presenter |
| View знает о Model? | Может знать | Нет |
| Model знает о View? | Нет | Нет |
| Testability (тестируемость) | Средняя | Высокая |
| Где используется | Web-фреймворки, backend | Android, десктоп, сложные UI |
Когда использовать
| Сценарий | Подход |
|---|---|
| Простое приложение с минимумом логики | MVC |
| Большое приложение, требующее модульности и тестируемости | MVP |
| Разработка под Android или с ограниченным UI | MVP |
| React / Vue / Angular | Чаще используется MVVM или FSD, но принципы схожи |
Полезно знать:
В современном фронтенде чаще используются вариации этих паттернов: MVVM, Redux, Flux и архитектура Feature-Sliced Design (FSD).
- refactoring.guru - паттерны и рефакторинг
- patterns.dev - паттерны