Skip to main content

Розкажіть про підхід 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. Як це працює

javascript
Користувач View ───▶ Presenter ───▶ Model ◀────────────── (оновлення даних)
  1. Користувач виконує дію (наприклад, натискає кнопку).
  2. View передає подію в Presenter.
  3. Presenter викликає Model, отримує результат.
  4. Presenter повідомляє View, що і як відобразити.

3. Основні відмінності від MVC

ПараметрMVCMVP
КонтролерСпрямовує потік данихПрезентер керує логікою і View
ViewМоже напряму звертатися до ModelПрацює лише через Presenter
ВзаємодіяView ↔ Controller ↔ ModelView → 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 координує все між ними.

Результат - код, який легко тестувати, підтримувати й розвивати.

Коротка відповідь

Для співбесіди
Premium

Коротка відповідь допоможе вам впевнено відповідати на цю тему під час співбесіди.