Hungry Mind , Blog about everything in IT - C#, Java, C++, .NET, Windows, WinAPI, ...

MVP and MVC Part 2

Эта статья содержит вступление, общее представление и сравнение трех архитектурных шаблонов построения интерактивных приложений: Model-View-Controller, Model-View-Presenter и Presentation-Abstraction-Control.

Часть 1, Часть 2, TBD.

Вариации и производные шаблонов

Классический шаблон Model-View-Controller сейчас по большей части не используется в первоначальном дизайне, хотя из него выросло несколько вариаций, адаптированных к новым платформам разработки таким, как Microsoft Windows и Web. О двух из этих вариаций, Model-View-Presenter и Presentation-Abstraction-Control, будет рассказано далее в статье.

Шаблон Model-View-Presenter

Шаблон Model-View-Presenter представляет собой вариацию шаблона Model-View-Controller и выделяет данные приложения, отображение и пользовательский ввод в специализированные компоненты.

Определение и отличающие характеристики этого шаблона нельзя просто резюмировать поскольку под именем Model-View-Presenter живет несколько шаблонов, которые не имеют общих особенностей, отделяющих их от предшественника, шаблона Model-View-Controller. Поэтому в статье будет освещен оригинальный шаблон Model-View-Presenter вместе с некоторыми его вариациями и производными.

Шаблон Taligent Model-View-Presenter

Обзор

Шаблон Taligent Model-View-Presenter отделяет данные, спецификации данных, манипуляции над данными, координацию приложения, взаимодействие с пользователем и визуализацию в специализированные компоненты.

Происхождение и мотивация

Шаблон MVP был построен на программной модели Taligent, которая сама была подвержена влиянию оригинального шаблона Smalltalk-80 MVC. Впервые шаблон был формально описан в 1996 Майком Потелом, который в то время работал на Taligent, Inc. Taligent была основана Apple Computer, Inc. как совместное предприятие с IBM (в последствии с Hewlett Packard), а позже, в 1995, она стала дочерней компанией IBM. Многие элементы оригинального шаблона MVP обрели ясность в Apple под руководством Лэри Теслера, который ранее работал в Xerox PARC, где он был одним из участников дизайна и реализации Smalltalk.

Хотя основные элементы шаблона были использованы Taligent в 1992-1994 гг., пока Taligent, Inc. не была куплена IBM в 1995 и Майк Потел впервые предложил название Model-View-Presenter для описания архитектуры программной модели Taligent, сам шаблон не был. Потел говорит о Arn Schaeffer, Dave Anderson и David Goldsmith, как о главных участниках программной модели Taligent, которая послужила основой шаблона MVP (3).

Структура

Следующая диаграмма изображает структуру шаблона Taligent Model-View-Presenter:

The structure of the Taligent Model-View-Presenter pattern

Компоненты

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

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

Команды - это компоненты, определяющие операции над данными. Примеры команд: удаление, печать, сохранение данных Модели.

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

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

Презентер является компонентом, который организовывает взаимодействие всех остальных компонент приложения. Среди его обязанностей - создание Моделей, Наборов, Команд, Представлений и Интеракторов, а также управление ходом работы приложения.

Взаимодействия

Самые существенные различия между шаблонами Taligent Model-View-Presenter и Model-View-Controller касаются Презентеров и Интеракторов.

Презентер выступает, как общее управление определенной подсистемой приложения. Он поддерживает жизненный цикл и взаимосвязи между Представлениями, Интеракторами, Командами, Наборами и Моделью. Обязанность по перехвату событий от пользователя ложиться на Интеракторы, поэтому Презентеры не требуются для каждого элемента управления на Представлении, как требовались Контроллеры в Smalltalk-80.

Интеракторы напоминают Контроллеры Smalltalk-80. Эти компоненты реагируют на сообщения пользователя, используя соответствующие Команды и Наборы Модели.

Шаблон Dolphin Smalltalk Model-View-Presenter

Обзор

Шаблон Dolphin Smalltalk Model-View-Presenter выделяет данные приложения, отображение и логику отображения в специализированные компоненты - Модель, Представление и Презентер. Команда Dolphin Smalltalk упростила шаблон Taligent MVP путем удаления Интеракторов, Команд и Наборов из формального описания. Это, в свою очередь, упростило Презентер путем замены роли управления определенными подсистемами приложения на посредничество между Моделью и Представлением.

Происхождение и мотивация

Шаблон Dolphin Smalltalk Model-View-Presenter был адаптирован из шаблона Taligent Model-View-Presenter для решения проблем гибкости в команде разработчиков Dolphin, касающиеся разделения представления и домена приложения. Команда рассматривала вариацию шаблона MVC, используемую в ParcPlace Systems' VisualWorks. Хотя команда Dolphin изначально рассматривала дизайн VisualWorks MVC, позже она была разочарована установленной Моделью Приложения, чья сложность время от времени искушала разработчиков разрешить модели использовать представление напрямую. Также команда выяснила, что MVC-концепция Контроллера, первичной целью которого была реакция на пользовательские сообщения, не сочеталась с платформами разработки, где базовые элементы управления обрабатывали пользовательский ввод самостоятельно. После знакомства с шаблоном Taligent MVP, команда Dolphin сделала вывод, что он больше удовлетворял их задачам. Не смотря на преимущества шаблона Taligent MVP, команда ошибочно верила, что Taligent вывела свой шаблон из реализации VisualWorks’ MVC и устранила использование Модели Приложения путем перемещения логики представления из Модели в Презентер. Они описали это, как Поворот Триады, хотя это не описывает разницу между шаблонами Taligent MVP и оригинальным Smalltalk-80 MVC. По этой причине, они видели Презентер, как замену Модели Приложения из VisualWorks’ MVC, нежели как эволюцию Контроллера Smalltalk-80 MVC. Результирующий шаблон, реализованный командой Dolphin Smalltalk, был лишен большинства компонентов, которые выделяли оригинальный MVP от MVC. С другой стороны, были представлены отличительные качества.

Структура

Следующая диаграмма изображает структуру шаблона Dolphin Smalltalk Model-View-Presenter:

The structure of the Dolphin Smalltalk Model-View-Presenter pattern

Компоненты

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

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

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

Взаимодействия

В контексте шаблона Dolphin MVP, Представления перехватывают сообщения пользователя, сгенерированные операционной системой. Этот выбор был результатом разработки для ОС Microsoft Windows, чьи базовые элементы управления покрывали большую часть функционала контроллера. В немногих случаях Представление отвечало на пользовательские сообщения обновляя напрямую Модель, но, в большинстве случаев, события делегировались Презентеру. Описание Dolphin Smalltalk предполагает, что Представление только делегирует события, когда требуются обновления Модели, таким образом оставляя всю логику отображения Представлению.

Как и в шаблоне Taligent MVP, существует единственный Презентер, обрабатывающий обновления Модели для конкретного Представления.

Как и в шаблоне Model-View-Controller, Представление уведомляется об изменениях Модели при помощи шаблона Обозреватель и отвечает обновлением релевантных частей экрана.

Dolphin Smalltalk MVP и Smalltalk-80 MVC

На первый взгляд, различия шаблонов Dolphin Smalltalk и Smalltalk-80 MVC увидеть тяжело. Оба шаблона состоят из триады. Обое содержат Модель и Представление, идентичные по функциональности. И Контроллер Smalltalk-80 и Презентер Dolphin Smalltalk задействованы при обновлении Модели. Оба используют шаблон Обозреватель для оповещения Представления о изменениях Модели. С учетов такого сходства, понятно, почему понимание отличий Model-View-Presenter от Model-View-Controller сопровождается путаницей. Важный момент - понимание ключевых функций, которые Презентер и Контроллер играют в соответствующих триадах.

В контексте оригинального шаблона Model-View-Controller ключевой задачей Контроллера был перехват пользовательского ввода. Роль Контроллера по обновлению Модели была по большей части побочным эффектом этой функции, нежели неотъемлемой частью.

В контексте шаблона Dolphin Smalltalk Model-View-Presenter, наоборот, ключевой целью Презентера было обновление Модели. Роль Презентера по перехвату сообщений, делегированных Представлением, была побочным продуктом этой функции, нежели неотъемлемой частью.

Частью оригинальной идеи, которая привела к разработке шаблона MVC, было разделение пользовательского интеллектуального отображения данных (Модели) и логики, которая позволяла пользователю взаимодействовать с этим представлением (Редактор). Это считали разделением Модель\Редактор (4). Так как задачи по отображению данных на экране технически сильно отличались от задач интерпретации пользовательского ввода, объединение их в один объект вносило излишнюю сложность. Поэтому, задачи ввода и выводы были разделены по Контроллерам и Представлениям. Поскольку Контроллеры получили обязанности Редактора, логично, что они также стали ответственными за обновление Модели по причине пользовательского ввода.

В рамках шаблона Dolphin Smalltalk MVP, роль перехвата пользовательского ввода была возложена на Представление. Это эффективно устранило начальную потребность в Контроллерах и Интеракторах. Хотя команда Taligent видела оригинальную идею Презентера, как продвижение Контроллера на уровень приложения, команда Dolphin ошибочно расценивала его, как замену Модели Приложения VisualWorks и поддерживала Презентер, как посредствующий компонент в триаде.

Итак, хотя шаблоны Dolphin Smalltalk MVP и Smalltalk-80 MVC могут казаться похожими на первый взгляд, Презентеры и Контроллеры отличаются целью, для достижения которой их придумали.

1 коммент.:

Анонимный комментирует...

Hi there! I could have sworn I've visited this site before but after going through many of the articles I realized it's new to me.
Anyways, I'm certainly pleased I stumbled upon it and I'll
be book-marking it and checking back often!
Feel free to surf my page GFI Norte

Отправить комментарий

Copyright 2007-2011 Chabster