Мартин Фаулер - Архитектура Графического Пользовательского Интерфейса. Часть 4

Предыдущая часть Здесь .

Оригинальная статья Здесь .

Модель-представление-презентатор (MVP) Архитектура MVP впервые появилась в IBM и стала более выраженной с появлением системы Taligent в 1990-х годах.

Достаточно подробно описано в работе Потеля ( Потель ).

Идею подхватили разработчики Дельфин Smalltalk .

Как мы увидим позже, эти две работы не говорят об одном и том же, но идея, лежащая в их основе, стала очень популярной.

Мы будем ссылаться на эти два источника при описании архитектуры.

Прежде чем приступить к описанию MVP, мне кажется полезным подумать о существенных различиях между двумя столпами разработки пользовательского интерфейса.

С одной стороны, это Forms and Elements, архитектура, которая является основным направлением дизайна пользовательского интерфейса.

С другой стороны — MVC и его производные.

Модель форм и элементов предоставляет разработчику простой для понимания дизайн и позволяет легко отделить повторно используемые элементы управления от бизнес-кода приложения.

Ему не хватает того, что есть в изобилии у MVC — разделенного представления ( Отдельная презентация ) и контекст программирования, определяемый использованием модели предметной области ( Модель предметной области ).

Я рассматриваю MVP как комбинацию этих двух моделей, как попытку взять от них лучшее.

По мнению Потеля, под представлением в MVP следует понимать структуру элементов управления формой в модели «Формы и элементы», и любое разделение управления на контроллер/представление должно быть удалено.

Представление не должно содержать никакого поведения, определяющего, как элемент взаимодействует с пользователем.

Это взаимодействие осуществляется в отдельном объекте представления (презентаторе).

Базовые обработчики событий управления остаются в представлении, но их цель — передать управление презентатору.

Ведущий должен определить, как реагировать на событие.

Потель определяет это взаимодействие как действия над моделью, которые происходят через систему команд и выборов.

Кстати, можете взять на заметку такой подход — упаковка всех редакций модели в команду.

Это позволит вам легко ввести поведение отмены/повтора.

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

Также требуется наличие объекта-презентатора.

Однако Dolphin не определяет систему взаимодействия ведущего и модели.

Кроме того, здесь явно указано, что объект-представитель должен иметь прямой доступ к представлению.

Потель ничего не говорит о том, должен ли презентер иметь доступ к представлению или нет, но для Dolphin такое поведение очень важно именно из-за проблемы в Модели Приложения с отклонением цвета, которую я описал в предыдущем разделе.

Как вы помните, она решалась таким топорным, с моей точки зрения, способом.

Еще одним ключом к пониманию MVP является понимание того, как докладчик управляет элементами презентации.

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

Господа Бауэр и МакГлашан предложить свое решение, которое я называю Контролер-контролер .

В этом решении почти вся логика представления также определена в представлении, но презентатор имеет возможность влиять на эту логику в сложных сценариях.

Те.

некоторая часть логики представления может быть помещена в презентатор.

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

Пассивный просмотр изначально не был частью модели MVP. Эта модель появилась позже, когда люди научились решать задачи тестирования.

Об этой модели я расскажу позже, а пока просто скажу, что это разновидность MVP. Прежде чем определить отличие MVP от всего остального, что я описал выше, хотелось бы сказать несколько слов об упомянутых мной работах.

Они определяют разницу между MVP и MVC, но не так, как я это вижу.

Потель утверждает, что контроллеры в MVC являются общими координаторами, с чем я не согласен.

Dolphin много говорит о проблемах MVC, и под MVC подразумевают модель приложения VisualWorks, а не тот классический MVC, о котором я говорил.

Я их в этом не виню — информацию о классическом MVC в наши дни получить не так-то просто.

Теперь самое время поговорить об отличиях MVP от предыдущих архитектур (какими я их вижу):

  • Формы и элементы: MVP имеет модель и ведущий манипулирует этой моделью с помощью синхронизации через браузер ( Синхронизация наблюдателей ) при обновлении представления.

    И хотя прямой доступ к элементам управления ведущего разрешен, пользоваться этим доступом — дурной тон.

  • MVC: Для управления моделью модель MVP использует Контролер-контролер .

    ?Элементы управления передают пользовательский ввод Контролер-контролер .

    Элементы управления не разделены на представления и контроллеры.

    Presenter можно рассматривать как контроллер, но без первоначальной обработки ввода пользователя.

    Важно то, что презентер — это объект уровня формы, а не объект уровня управления — на мой взгляд, это еще большая разница.

  • Модель приложения: представления передают события презентатору так же, как они передают их модели приложения.

    Однако представление в MVP может обновляться непосредственно из модели предметной области, поскольку презентатор не является моделью представления ( Модель презентации ).

    Кроме того, докладчик может иметь прямой доступ к элементам управления, что невозможно при синхронизации с браузером ( Синхронизация наблюдателей ).

Между презентаторами MVP и контроллерами MVC есть явное сходство.

Presenter — это просто более свободная форма контроллера.

В результате многие архитектуры будут следовать по пути MVP, но будут использовать термин «контроллер» для обозначения презентатора.

Вообще говоря, вам нужно использовать контроллер, когда вы имеете дело с проблемой взаимодействия с пользовательским вводом на уровне элемента управления.



Мартин Фаулер - Архитектура графического пользовательского интерфейса.
</p><p>
 Часть 4

Рис.

12. Диаграмма последовательности обновления текущего значения в модели MVP. Давайте посмотрим, как работает обновление текущего значения на примере мороженого (рис.

12 ).

Начало диаграммы очень похоже на то, что было в «формах и элементах» — пользователь вводит значение, текстовое поле отправляет событие «текст изменен».

Presenter прослушивает это событие и перехватывает его, после чего принимает новое значение из представления.

Затем он обновляет объект домена, который, в свою очередь, отображается в текстовом поле отклонения.

Текстовое поле отклонения обновляет свое значение расчетным значением, а затем ему присваивается цвет. Цвет назначает ведущий.

Он считывает категорию отклонения измерения и обновляет цвет текстового поля (через прямую ссылку на элемент управления).

Подведем итог модели MVP:

  • Взаимодействия пользователя (события) передаются элементами управления Контролер-контролер , где происходит дальнейшая обработка.

  • Ведущий координирует изменения в модели предметной области.

  • Реализация обновления представления разными вариациями MVP осуществляется по-разному.

    Количество способов начинается с обновления через браузер ( Синхронизация наблюдателей ) и заканчивается ручным обновлением каждого элемента управления презентатором.

Следующая часть Здесь .

Теги: #программирование #архитектура программного обеспечения #перевод #программирование

Вместе с данным постом часто просматривают:

Автор Статьи


Зарегистрирован: 2019-12-10 15:07:06
Баллов опыта: 0
Всего постов на сайте: 0
Всего комментарий на сайте: 0
Dima Manisha

Dima Manisha

Эксперт Wmlog. Профессиональный веб-мастер, SEO-специалист, дизайнер, маркетолог и интернет-предприниматель.