Model-View-Presenter

Материал из Википедии — свободной энциклопедии
Это старая версия этой страницы, сохранённая Kovani (обсуждение | вклад) в 14:31, 29 июля 2015 (Описание шаблона: викификация). Она может серьёзно отличаться от текущей версии.
Перейти к навигации Перейти к поиску
Model-View-Presenter
Model View Presenter
Описан в Design Patterns Нет

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

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

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

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

  • Модель (англ. Model) — предоставляет данные для пользовательского интерфейса.
  • Представление (англ. View) — реализует отображение данных (Модели) и маршрутизацию пользовательских команд или событий Presenter-у.
  • Presenter — управляет Моделью и на Представлением. Например извлекает данные из Модели и форматирует их для отображения в Представлении.

Обычно, реализация Представления создаёт экземпляр конкретного объекта Presenter-а и предоставляет ссылку на себя. (Формально параметром конструктора Presenter’a является интерфейс Представления, в то время как в конструктор передается конкретная реализация Представления). Когда вызывается событие Представления, оно вызывает конкретный метод Presenter’а, не имеющего параметров и возвращаемого значения. Далее Presenter через интерфейс получает данные из Представления, после чего вызывает методы Модели и устанавливает через интерфейс данные из Модели в Представление.

Следующий код C# демонстрирует простой конструктор Представления, здесь ConcreteDomainPresenter есть реализация интерфейса IDomainPresenter:

public class DomainView: IDomainView
{
    private IDomainPresenter domainPresenter;
 
    public DomainView()   // Constructor
    {
        this.domainPresenter = new ConcreteDomainPresenter(this);
    }
}

Количество логики, допустимой в Представлении, различается для разных реализаций.

С точки зрения многоуровневой модели приложений в ООП, Presenter может рассматриваться как самостоятельный уровень между уровнем приложения и уровнем пользовательского интерфейса.

История

Эволюция и несколько вариантов шаблона MVP, в том числе отношения MVP с другими шаблонами проектирования (такими как MVC) были подробно проанализированы в статье Мартина Фаулера[1] [2] , а также в статье Дерека Грира[3].

См. также

Ссылки