Модель – представление – презентатор ( MVP ) является производным от архитектурного шаблона модель – представление – контроллер (MVC) и используется в основном для создания пользовательских интерфейсов.
В MVP ведущий берет на себя функции «посредника». В MVP вся логика представления передается докладчику. [1]
История
Шаблон программного обеспечения модель-представление-презентатор возник в начале 1990-х годов в Taligent , совместном предприятии Apple , IBM и Hewlett-Packard . [2] MVP - это базовая модель программирования для разработки приложений в среде CommonPoint на основе C ++ от Taligent. Позднее компания Taligent перенесла этот паттерн на Java и популяризировал его в статье технического директора Taligent Майка Потеля. [3]
После прекращения производства Taligent в 1998 году Энди Бауэр и Блэр МакГлашан из Dolphin Smalltalk адаптировали шаблон MVP, чтобы сформировать основу для своей инфраструктуры пользовательского интерфейса Smalltalk. [4] В 2006 году Microsoft начала включать MVP в свою документацию и примеры программирования пользовательского интерфейса в .NET Framework . [5] [6]
Эволюция и несколько вариантов шаблона MVP, включая взаимосвязь MVP с другими шаблонами проектирования, такими как MVC, подробно обсуждаются в статье Мартина Фаулера [7] и другой статье Дерека Грира. [8]
Обзор
MVP - это архитектурный шаблон пользовательского интерфейса, разработанный для облегчения автоматизированного модульного тестирования и улучшения разделения проблем в логике представления:
- Модель представляет собой интерфейс определения данных , которые будут отображаться или иным образом действовал на в пользовательском интерфейсе.
- Вид представляет собой пассивный интерфейс , который отображает данные (модель) и команды маршрутов пользователей ( события ) к ведущему действовать в соответствии с этими данными.
- Ведущий действует на модели и вида. Он извлекает данные из репозиториев (модель) и форматирует их для отображения в представлении.
Обычно реализация представления создает конкретный объект-презентатор, предоставляя ссылку на себя. Следующий код C # демонстрирует простой конструктор представления, где ConcreteDomainPresenter реализует Интерфейс IDomainPresenter :
общедоступный класс DomainView : IDomainView { частный IDomainPresenter _domainPresenter = null ; /// Конструктор. public DomainView () { _domainPresenter = new ConcreteDomainPresenter ( this ); } }
Степень логики, разрешенная в представлении, варьируется в зависимости от реализации. С одной стороны, представление полностью пассивно, перенаправляя все операции взаимодействия докладчику. В этой формулировке, когда пользователь запускает метод события представления, он ничего не делает, кроме как вызывает метод ведущего, у которого нет параметров и возвращаемого значения. Затем докладчик извлекает данные из представления с помощью методов, определенных интерфейсом представления. Наконец, ведущий работает с моделью и обновляет представление с результатами операции. Другие версии model-view-presenter допускают некоторую свободу в отношении того, какой класс обрабатывает конкретное взаимодействие, событие или команду. Это часто больше подходит для веб-архитектур, где представление, которое выполняется в браузере клиента, может быть лучшим местом для обработки конкретного взаимодействия или команды.
С точки зрения многоуровневости класс презентатора можно рассматривать как принадлежащий к прикладному уровню в системе с многоуровневой архитектурой , но его также можно рассматривать как собственный уровень презентатора между уровнем приложения и уровнем пользовательского интерфейса .
Реализации
.СЕТЬ
Среда .NET поддерживает шаблон MVP, как и любая другая среда разработки. Одна и та же модель и класс презентатора могут использоваться для поддержки нескольких интерфейсов, таких как веб-приложение ASP.NET, приложение Windows Forms или приложение Silverlight . Ведущий получает и устанавливает информацию из / в представление через интерфейс, к которому может получить доступ компонент интерфейса (представления).
В дополнение к ручной реализации шаблона, структура модель-представление-презентатор может использоваться для поддержки шаблона MVP более автоматизированным способом.
Ява
В приложении Java ( AWT / Swing / SWT ) шаблон MVP можно использовать, разрешив классу пользовательского интерфейса реализовать интерфейс представления.
Тот же подход можно использовать для веб-приложений Java, поскольку современные веб-фреймворки на основе компонентов Java позволяют разрабатывать логику на стороне клиента, используя тот же компонентный подход, что и толстые клиенты.
Для реализации MVP в Google Web Toolkit требуется только, чтобы некоторый компонент реализовывал интерфейс представления. Такой же подход возможен с использованием Vaadin или веб-фреймворка Echo2 .
Фреймворки Java включают следующее:
PHP
Что касается гибкой среды выполнения PHP , существуют широкие возможности подходов к логике приложения. Реализация уровня модели оставлена на усмотрение программиста приложения.
Фреймворки PHP включают следующее:
- CodeIgniter
- Laravel
- Нетте Фреймворк
Смотрите также
- Многоуровневая архитектура
- Модель – представление – контроллер
- Модель – вид – модель просмотра
- Сначала докладчик (программный подход)
Рекомендации
- ^ «Проект GWT» . developers.google.com .
- ^ Требуется исследование - эта модель использовалась в пространстве ERP (Lawson Software Inc.) задолго до этого.
- ^ «MVP: Model-View-Presenter. Модель Taligent Programming для C ++ и Java». Майк Потель
- ^ «Скручивание триады. Эволюция инфраструктуры приложений Dolphin Smalltalk MVP». Энди Бауэр, Блэр МакГлашан
- ^ «Вопросы журнала MSDN» . msdn.microsoft.com .
- ^ «Паттерн модель-представление-презентатор (MVP)» . msdn.microsoft.com .
- ^ "Архитектура графического интерфейса пользователя" Мартин Фаулер
- ^ «Шаблоны архитектуры интерактивных приложений» . www.aspiringcraftsman.com .
Внешние ссылки
- Пример презентации Model View из проекта GWT.
- Мысли о реализации Model-View-Presenter на StackExchange