Model-View-Presenter: различия между версиями

Материал из Википедии — свободной энциклопедии
Перейти к навигации Перейти к поиску
[непроверенная версия][непроверенная версия]
Содержимое удалено Содержимое добавлено
Описание шаблона: Исправлена ошибка несовпадения параметров
Не правильное обоснование понятия Модели в патерне.
Строка 22: Строка 22:


MVP — шаблон проектирования пользовательского интерфейса, который был разработан для облегчения автоматического [[модульное тестирование|модульного тестирования]] и улучшения [[разделение ответственности|разделения ответственности]] в презентационной логике (отделения логики от отображения):
MVP — шаблон проектирования пользовательского интерфейса, который был разработан для облегчения автоматического [[модульное тестирование|модульного тестирования]] и улучшения [[разделение ответственности|разделения ответственности]] в презентационной логике (отделения логики от отображения):
* ''Модель'' ({{lang-en|Model}}) — хранит в себе всю бизнес-логику, при необходимости получает данные из хранилища.
* ''Модель'' ({{lang-en|Model}}) — хранит в себе всю бизнес-логику (какую бизнес логику????, разве не презентер выполняет логические операции, модель изменяет свое состояние и передает данные презентеру по его требованию), при необходимости получает данные из хранилища.
* ''Представление'' ({{lang-en|View}}) — реализует ''отображение'' данных (из Модели), обращается к Presenter за обновлениями.
* ''Представление'' ({{lang-en|View}}) — реализует ''отображение'' данных (из Модели), обращается к Presenter за обновлениями.
* ''Presenter'' —  представитель; реализует взаимодействие между моделью и представлением. 
* ''Presenter'' —  представитель; реализует взаимодействие между моделью и представлением. 

Версия от 07:08, 21 июня 2017

Model-View-Presenter
Model View Presenter
Структура
  • Model
  • View
  • Presenter
Родственные шаблоны Model-View-Controller
Описан в Design Patterns Нет

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

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

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

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

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

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

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].

См. также

Примечания

Ссылки