GWT виджеты против MVP - PullRequest
       1

GWT виджеты против MVP

5 голосов
/ 26 февраля 2012

Я ищу руководство по архитектуре GWT - когда использовать автономные виджеты против MVP / Активности / Места.

Фон

После прочтения документации Google и поиска Stackoverflow,Проект gwt-examples предоставляет лучшую иллюстрацию к этому вопросу: http://code.google.com/p/gwt-examples/source/browse/trunk_2012/DemoGwtEditor/src/com/gonevertical/client/?r=3138#client%2Fviews

Приложение разделено на сильно разделенные представления, каждое представление соответствует одноранговому узлу DOM.Действия и места используются для управления логикой / RPC и навигацией для данного представления.Хотя это и неточно, для краткости я буду называть этот шаблон MVP.

Виджеты не соответствуют этому шаблону и содержат как вызовы view, так и вызовы логики / RPC.

Context

В контексте этого вопроса я имею в виду сложное приложение GWT, использующее TabLayoutPanel для создания отдельных «экранов».Каждая вкладка / экран в целом относится к пользовательской активности.Mint.com является хорошим примером такого интерфейса: вкладка панели инструментов, вкладка транзакций, вкладка бюджетов, вкладка трендов и т. Д. Каждая вкладка построена из ряда подкомпонентов : диаграмма сселекторы, селектор отчетов, таблица транзакций и т. д.

Подкомпонент, такой как таблица транзакций, вероятно, представляет собой совокупность нескольких объектов GWT - например, таблицу с парой кнопок.Google doco показывает этот вид подкомпонента как разложенный на MVP.

Допущения - виджеты против MVP

Обработка подкомпонентов с помощью MVP означает:

  • очень большие классы представления и активности / докладчика для каждой вкладки или
  • вложенность MVP и набор файлов (по 5 на каждый компонент)

С другой стороны, подкомпоненты как виджеты означают:

  • очень легкую структуру MVP только для управления историей навигации по вкладкам;вряд ли оно того стоит
  • без разъединения (поэтому трудности с модульным тестированием и переключением видов)

Вопросы

  • Верны ли эти предположения?
  • Когда использовать пользовательские, составные виджеты поверх не связанных видов / MVP (или наоборот)?

Ответы [ 3 ]

2 голосов
/ 11 марта 2015

Пользовательские виджеты и MVP не сопоставимы. Они не являются вариантами ответа на один вопрос, но являются ответами на 2 отдельных вопроса.

Вопрос 1. Когда мне писать собственные виджеты? Вопрос 2: Должен ли я использовать MVP (или я должен использовать MVC, или я не должен использовать какой-либо шаблон)?

Сначала отвечая на вопрос 2:

Использовать MVP

  • Для приложения, которое будет иметь несколько экранов / действий, которые, по вашему мнению, могут стать громоздкими для управления, если структура кода слишком проста - пользовательский интерфейс, команды сервера, обработка событий пользовательского интерфейса и т. Д. В одном месте
  • Когда вы знаете, что у вас будет более одного интерфейса для одной и той же функциональности. Например, приложение, которое будет использоваться в настольном браузере, а также в мобильном браузере. Вы можете иметь совершенно разные «представления» реализации для настольных компьютеров и мобильных устройств
  • Когда вы хотите провести модульное тестирование или разработку через тестирование
  • Если (вы или ваша команда) имеете опыт работы с такими средами, как MVC или MVP

Использовать пользовательские виджеты

  • Когда у вас нет виджета, который служит цели
  • Когда вы используете более одного виджета для достижения некоторой функциональности. Например, если вам нужно текстовое поле, пользователь вводит данные в это поле, а вы обрабатываете ввод на стороне клиента и отображаете его в метке. Теперь предположим, что вы хотите эту функцию более чем в одном месте. Было бы разумно написать повторно используемый код. Пользовательские виджеты делают это
  • Когда вы хотите улучшить функциональность уже доступного виджета. Например, вы хотите, чтобы обработчик нажатия по умолчанию для кнопки обрабатывался определенным образом
2 голосов
/ 26 февраля 2012

Чтобы ответить на этот вопрос, вы сначала должны взглянуть на мероприятия и места - поскольку занятия очень часто являются двойной обязанностью, как докладчиков. Менеджер активности заботится об определенной области экрана. Например, область вкладок может контролироваться менеджером операций, где каждое действие представляет собой отдельную вкладку. Это будет означать, что каждая вкладка имеет своего собственного докладчика. Презентатор должен знать только о частях пользовательского интерфейса представления, в которых он либо должен загружать данные в / из (и, если только редактируя данные, вы можете уменьшить это только до драйвера редактора), и об элементах, на которые он должен реагировать на события.
Докладчику не нужно знать о событиях представления, которые имеют отношение только к отвечающему представлению, например, панели раскрытия информации или выбранные объекты. Единственный случай, когда докладчик участвует, - это когда пользовательский интерфейс отправляет событие, которое требует некоторой логики бизнес-модели - например, отображение дополнительных деталей элемента списка, создание новых элементов списка или сохранение модели.

Это помогает?

1 голос
/ 26 февраля 2012

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

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

Я думаю, что нет идеального решения, и оно, вероятно, также зависит от варианта использования / приложения. Я обычно стараюсь избегать внутренних вызовов (RPC или около того) от самих виджетов. Я пытаюсь спроектировать виджеты таким образом, чтобы докладчики обрабатывали и отображали данные извне.
Таким образом, в основном виджеты представляются только как подкомпоненты, которые заполняются и контролируются докладчиком и встраиваются в представление.

Если вы хотите иметь более сложные виджеты, которые также содержат бизнес-логику и внутренние вызовы, попробуйте применить шаблон MVP к виджету.

Это также зависит от того, какой тип MVP вы используете. С деятельностью и местами (хорошо, строго не в рамках MVP) у вас обычно нет вложенных докладчиков (см. Томас Бройер блог ).
Это отличается, когда вы используете GWTP MVP Framework, который имеет концепцию PresenterWidgets и позволяет вкладывать докладчиков.

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