GWT MVP вводные вопросы - PullRequest
2 голосов
/ 05 июля 2011

Я прочитал много вопросов gwt-mvp, которые здесь задаются, но, поскольку я совершенно новичок в этом шаблоне проектирования, я хотел бы задать несколько вопросов:

[1] Место действияшаблон представляет собой другой шаблон, чем mvp?

[2] В шаблонах MVP презентаторы содержат логику.Теперь логика виджетов / элементов управления определена в Деятельностях?

[3] Классы CustomPlace фиксированы (как их создает плагин Eclipse) или я могу поместить данные / методы и какого рода?

[4] Какая польза от интерфейса Presenter внутри CustomView?Какие данные / методы имеет смысл добавить в него?

[5] Я хочу создать приложение, которое будет использовать множество структур данных, которые будут сохранены в базе данных.Я прочитал несколько других постов здесь, и я сделаю Модель частью MVP вживую в каждое действие.Поэтому я думаю каждый раз создавать структуры данных каждого действия и загружать их значения (при необходимости из db) и обновлять базу данных после перехода пользователя в другое представление.Что вы думаете об этом подходе?

Ответы [ 2 ]

3 голосов
/ 06 июля 2011
  1. Давайте начнем с развенчания одного мифа: деятельность / места не имеют ничего общего с MVP. «Места» - это навигация, «Мероприятия» - «компонентизация» интерфейса пользователя с местами. С другой стороны, MVP - это шаблон проектирования, в котором рассказывается о том, как организовать ваш код.

  2. Многие люди используют свою деятельность в качестве MVP-докладчиков, но это не применяется. Команда GWT пробует новый подход, в котором деятельность отличается от докладчика (работа идет по образцу mobilewebapp, если вы хотите следить за тем, что там происходит). Вы также можете настроить свою деятельность на просмотр и использование «внутреннего» докладчика (аналогично работе виджетов Cell)

  3. Место - это более или менее URL. Вы можете положить все, что вы хотите в нем. Я бы предложил сделать места неизменяемыми: создайте Место, goTo, используйте его свойства для создания вашего пользовательского интерфейса.

  4. Это о MVP тогда. Это необходимо только для разделения вашего представления и презентатора, в основном для облегчения насмешек в модульных тестах (хотя это особенно касается интерфейса представлений, но не слишком для презентатора, если только вы не создадите тестовую привязку для ваших представлений). В некоторых случаях вы также можете использовать один и тот же вид с разными докладчиками; все они будут реализовывать один и тот же интерфейс, чтобы представление могло общаться с ними.

  5. Как насчет закрытия окна / вкладки? Я бы предпочел использовать периодическое автосохранение или явную кнопку сохранения; и внедрите mayStop, чтобы он запрашивал пользователя при наличии несохраненных изменений (аналогично тому, как работает большинство настольных офисных приложений - например, MS Word или LibreOffice - и GMail, если вы пытаетесь отойти до того, как черновик почты автоматически сохраняется)

2 голосов
/ 06 июля 2011
  1. Activity-Place является реализацией шаблона.Google представил шаблон gwt-mvp в Google IO, но только при условии, что он будет реализован в рамках GWT примерно через год.

  2. Да Действия содержат бизнес-логику.Нет, виджеты / элементы управления обычно не содержат никакой логики, они просто запускают события, основанные на действиях пользователя.Логика, которая воздействует на эти события, написана пользователем и находится в другом месте.

  3. Я не использую Eclipse, поэтому не буду знать о местах, сгенерированных им.Обычно пользовательские места могут содержать пользовательские поля и методы.Например, они могут содержать настраиваемые аргументы маркера места, т. Е. Если маркер места равен "#place: id1", то ваше пользовательское место может содержать поле, содержащее этот аргумент.

  4. Когда View необходимо вызвать/ Доступ к Activity, он делает это через Presenter, который реализует Activity.Например, когда пользователь вводит все данные в for и нажимает submit, в Presenter у вас может быть метод с именем submit(formData).

  5. Подготовка / загрузка данных в activity.start(..) - это нормальное явление.способ делать вещи.Если какая-то конкретная деятельность часто используется, вы можете рассмотреть возможность кэширования данных, если это необходимо.

...