- Model-View-Presenter
-
Шаблон проектирования Model View Presenter Model-View-Presenter (MVP) — шаблон проектирования, производный от MVC, который используется в основном для построения пользовательского интерфейса.
В MVP Presenter берет на себя функциональность посредника (играя роль, аналогичную контроллеру в MVC). Кроме того, Presenter отвечает за управление событиями пользовательского интерфейса (например, mouseDown, keyDown и т.д.), которое обычно было заботой контроллера. В итоге, модель становится строго моделью предметной области.
Содержание
Описание шаблона
MVP — шаблон проектирования пользовательского интерфейса, который был разработан для облегчения автоматического модульного тестирования и улучшения разделения ответственности в презентационной логике (отделения логики от отображения):
- Модель (model) представляет собой интерфейс, определяющий данные для отображения или участвующие в пользовательском интерфейсе иным образом
- Вид (view) - это интерфейс, который отображает данные (модель) и маршрутизирует пользовательские команды (или события) Presenter-у, чтобы тот действовал над этими данными.
- Presenter действует над моделью и видом. Он извлекает данные из хранилища (модели), и форматирует их для отображения в Виде (view).
View определяется как интерфейс, который Presenter будет использовать для получения и установки данных модели.
Обычно, реализация View инстанциирует конкретный объект Presenter-а, и предоставляет ссылку на себя. (Формально параметром конструктора Presenter’a является интерфейс View, в то время, как в конструктор передается конкретная реализация View). Когда вызывается событие View, оно вызывает конкретный метод Presenter’а который не имеет параметров и не имеет возвращаемого значения. Затем Presenter получает данные из View, через интерфейс. Затем Presenter вызывает методы модели, и устанавливает данные из модели во View через интерфейс.
Следующий код 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].
См. также
Ссылки
Категории:- Парадигмы программирования
- Шаблоны проектирования
Wikimedia Foundation. 2010.