Model-View-Presenter
| MVP | |
|---|---|
| Model View Presenter | |
| | |
| Структура |
|
| Родственные шаблоны | Model-View-Controller |
| Описан в Design Patterns | Нет |
Model-View-Presenter (MVP) — шаблон проектирования, производный от MVC, который используется в основном для построения пользовательского интерфейса.
Элемент Presenter в данном шаблоне берёт на себя функциональность посредника (аналогично контроллеру в MVC) и отвечает за управление событиями пользовательского интерфейса (например, использование мыши) так же, как в других шаблонах обычно отвечает представление.
Описание шаблона[править | править код]
MVP — шаблон проектирования пользовательского интерфейса, который был разработан для облегчения автоматического модульного тестирования и улучшения разделения ответственности в презентационной логике (отделения логики от отображения):
- Модель (англ. Model) — данные для отображения;
- Вид (англ. View) — реализует отображение данных (из Модели), обращается к Presenter за обновлениями, перенаправляет события от пользователя в Presenter;
- Представитель (англ. Presenter) — реализует взаимодействие между Моделью и Видом и содержит в себе всю логику представления данных о предметной области; при необходимости получает данные из хранилища и преобразует для отображения во 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].
См. также[править | править код]
Примечания[править | править код]
- ↑ «GUI Architectures» Мартин Фаулер. Часть 1 - вступление
- ↑ «GUI Architectures» Мартин Фаулер. Часть 2 - MVC
- ↑ «GUI Architectures» Мартин Фаулер. Часть 3 - MVC
- ↑ «GUI Architectures» Мартин Фаулер. Часть 4 - MVP
- ↑ «GUI Architectures» Мартин Фаулер. Часть 5 - Humble View
- ↑ «Interactive Application Architecture Patterns» Derek Greer
Ссылки[править | править код]
- Model-View-Controller в .Net RSDN (рус.)
- https://habrahabr.ru/post/171925/
- https://habrahabr.ru/post/107698/
Это заготовка статьи о программировании. Вы можете помочь проекту, дополнив её. |