Sobes.tech
Middle
151
questionbank

Что такое архитектурный паттерн MVP?

Answer from AI

sobes.tech AI

MVP (Model-View-Presenter) — это архитектурный паттерн для разделения бизнес-логики, данных и пользовательского интерфейса.

Ключевые компоненты:

  • Model: Представляет данные и бизнес-логику. Не имеет знаний об View или Presenter.
  • View: Отображает данные, предоставляет пользовательский интерфейс и перенаправляет действия пользователя в Presenter. Не содержит бизнес-логики. View пассивно и только отображает данные, полученные от Presenter.
  • Presenter: Действует как посредник между Model и View. Обрабатывает события пользовательского интерфейса, извлекает данные из Model и обновляет View. Presenter содержит логику представления, но не бизнес-логику. Presenter управляет состоянием View.

Взаимодействие:

  1. Пользователь взаимодействует с View.
  2. View делегирует действие Presenter.
  3. Presenter обрабатывает действие:
    • Обновляет Model, если требуется.
    • Запрашивает данные из Model.
    • Обновляет View с новыми данными.

Преимущества:

  • Улучшенная тестируемость (Presenter и Model могут быть протестированы независимо от View).
  • Разделение ответственности.
  • Улучшенная сопровождаемость.

Пример (схематичный):

// Модель
class DataModel {
    getData() {
        // ... логика получения данных ...
        return { message: "Привет из модели!" };
    }
}

// Представление (псевдокод UI)
class TextView {
    display(data) {
        // Обновить текст на экране
        console.log(data.message);
    }

    onClickButton(handler) {
        // Прикрепить обработчик к кнопке
    }
}

// Презентер
class Presenter {
    constructor(model, view) {
        this.model = model;
        this.view = view;
        this.view.onClickButton(this.handleButtonClick.bind(this)); // Связывание события
    }

    handleButtonClick() {
        const data = this.model.getData();
        this.view.display(data);
    }
}

// Использование
const model = new DataModel();
const view = new TextView(); // Реальное представление UI
const presenter = new Presenter(model, view);