Русская Википедия:Model-View-Presenter

Материал из Онлайн справочника
Перейти к навигацииПерейти к поиску

Шаблон:Шаблон проектирования

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

Элемент Presenter в данном шаблоне берёт на себя функциональность посредника (аналогично контроллеру в MVC) и отвечает за управление событиями пользовательского интерфейса (например, использование мыши) так же, как в других шаблонах обычно отвечает представление.

Описание шаблона

MVP — шаблон проектирования пользовательского интерфейса, который был разработан для облегчения автоматического модульного тестирования и улучшения разделения ответственности в презентационной логике (отделения логики от отображения):

  • Модель (Шаблон:Lang-en) — данные для отображения;
  • Вид (Шаблон:Lang-en) — реализует отображение данных (из Модели), обращается к Presenter за обновлениями, перенаправляет события от пользователя в Presenter;
  • Представитель (Шаблон:Lang-en) — реализует взаимодействие между Моделью и Видом и содержит в себе всю логику представления данных о предметной области; при необходимости получает данные из хранилища и преобразует для отображения во View.

Обычно экземпляр Вида (Представление) создаёт экземпляр Представителя, передавая ему ссылку на себя. При этом Представитель работает с Видом в абстрактном виде, через его интерфейс. Когда вызывается событие Представления, оно вызывает конкретный метод Представителя, не имеющего ни параметров, ни возвращаемого значения. Представитель получает необходимые для работы метода данные о состоянии пользовательского интерфейса через интерфейс Вида и через него же передаёт в Вид данные из Модели и другие результаты своей работы.

public class MyModel
{
    private int _state = 0;
    public MyModel(initState)
    {
        _state = initState;
    }
    public getState(){
        return _state;
    }
}
public class MyView: IView
{
    private IPresenter _presenter;
 
    public MyView()
    {
        _presenter = new MyPresenter(this);
    }
}

public class MyPresenter: IPresenter
{
    private IView _view;
    private MyModel _myModel;
 
    public MyPresenter(IView view)
    {
        _view = view;
        _myModel= new MyModel(1);
    }
}

История

MVP возник как альтернатива MVC. Подробный анализ можно посмотреть в статье Мартина Фаулера[1][2][3][4][5] , а также в статье Дерека Грира[6].

См. также

Примечания

Шаблон:Примечания

Ссылки

Шаблон:Compu-prog-stub