MVC (модель-подання-контролер) та MVP (модель-подання-презентер) патерни проектування
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 може запитувати дані безпосередньо з моделі.
- Controller "реагує" на дії користувача.
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 та MVP
| Характеристика | MVC | MVP |
|---|---|---|
| Хто управляє логікою? | Controller | Presenter |
| View знає про Model? | Може знати | Ні |
| Model знає про View? | Ні | Ні |
| Тестованість | Середня | Висока |
| Де використовується | Веб-фреймворки, бекенд | Android, десктоп, складний UI |
Коли використовувати
| Сценарій | Підхід |
|---|---|
| Простий застосунок з мінімальною логікою | MVC |
| Великий застосунок, що вимагає модульності та тестованості | MVP |
| Розробка для Android або обмежений UI | MVP |
| React / Vue / Angular | Часто використовує MVVM або FSD, але принципи схожі |
Корисно знати:
У сучасному фронтенді все частіше використовуються варіації цих патернів: MVVM, Redux, Flux та архітектура Feature-Sliced Design (FSD).
- refactoring.guru - патерни та рефакторинг
- patterns.dev - патерни
Зміст
MVC (Model - View - Controller)MVP (Model - View - Presenter)Порівняння MVC та MVPКоли використовувати
Коротка відповідь
Для співбесідиКоротка відповідь допоможе вам впевнено відповідати на цю тему під час співбесіди.