Розкажіть про підхід MVP.
MVP (Model-View-Presenter) - це архітектурний шаблон, що з'явився як розвиток MVC, щоб краще розділити відповідальність між інтерфейсом і логікою, особливо в інтерактивних UI-застосунках (мобільних, настільних, вебзастосунках).
Головна ідея - повністю ізолювати логіку від View, щоб інтерфейс став "тупим", а тестувати можна було без UI.
1. Основні компоненти
Model (Модель)
- Відповідає за дані і бізнес-логіку.
- Зберігає інформацію, виконує запити, обробляє правила.
- Не знає, хто і як буде ці дані показувати.
Приклад: клас UserModel з методами getUser(), saveUser().
View (Представлення)
- Відповідає лише за відображення інтерфейсу.
- Не містить бізнес-логіки і не керує Model напряму.
- Має інтерфейс (контракт), через який з нею працює Presenter.
Приклад: екран авторизації з методами showLoading(), showError(), showUserInfo().
Presenter (Презентер)
- Центральний елемент, аналог контролера в MVC, але розумніший.
- Керує взаємодією між View і Model.
- Отримує події від View (наприклад, "користувач натиснув кнопку"), викликає потрібні методи Model, обробляє відповідь і передає результат назад у View.
- Не знає, як саме View влаштована - працює лише через інтерфейс.
Приклад:
LoginPresenter слухає кнопку "Увійти", викликає AuthModel.login(), і залежно від результату викликає view.showSuccess() або view.showError().
2. Як це працює
Користувач
↓
View ───▶ Presenter ───▶ Model
◀──────────────
(оновлення даних)- Користувач виконує дію (наприклад, натискає кнопку).
- View передає подію в Presenter.
- Presenter викликає Model, отримує результат.
- Presenter повідомляє View, що і як відобразити.
3. Основні відмінності від MVC
| Параметр | MVC | MVP |
|---|---|---|
| Контролер | Спрямовує потік даних | Презентер керує логікою і View |
| View | Може напряму звертатися до Model | Працює лише через Presenter |
| Взаємодія | View ↔ Controller ↔ Model | View → Presenter → Model → Presenter → View |
| Тестованість | Середня | Висока (View можна підмінити моками) |
4. Варіанти MVP
- Passive View - View максимально "тупа", лише показує дані (ідеально для тестів).
- Supervising Presenter - частина логіки (наприклад, прив'язки даних) залишається у View, Presenter контролює загальні процеси.
5. Переваги MVP
Хороша тестованість - Presenter можна тестувати без UI. Розділення обов'язків - інтерфейс не містить логіки. Гнучкість - легко змінювати View (наприклад, вебінтерфейс замінити на мобільний). Спрощений супровід - шари незалежні й читабельні.
6. Недоліки
Більше коду (інтерфейси, контракти, зв'язки). При великому UI - ризик "розростання" Presenter. Вимагає дисципліни в розділенні ролей.
7. Де використовується MVP
- Android-застосунки (до переходу на MVVM - Google рекомендував MVP)
- Desktop-застосунки (WinForms, Swing, Qt)
- Вебзастосунки з JavaScript-фреймворками до появи реактивних моделей (Knockout, ранні версії AngularJS).
Підсумок:
MVP - це логічно чистий нащадок MVC: View нічого не знає про дані, Model нічого не знає про інтерфейс, а Presenter координує все між ними.
Результат - код, який легко тестувати, підтримувати й розвивати.
Коротка відповідь
Для співбесідиКоротка відповідь допоможе вам впевнено відповідати на цю тему під час співбесіди.