Использование MVP в классическом GWT - PullRequest
0 голосов
/ 18 февраля 2012

Я изучаю GWT и у меня есть несколько вопросов о шаблоне MVP.Обычно приложение GWT имеет 1 HTML-страницу, которая используется для отображения пользовательского интерфейса модуля.Итак, мы должны иметь 1 класс просмотра и 1 соответствующий класс докладчика?или мы должны думать о представлении как о коллекции нетривиальных виджетов (я имею в виду виджеты, которые не встроены в каркас, а виджеты, которые мы пишем сами), которые используются для создания сложного пользовательского интерфейса на этой 1 странице?Так в таком случае мы должны рассматривать этот сложный виджет как один вид и писать презентатор для каждого такого виджета?В последнем случае, как может осуществляться общение между всеми докладчиками?Нужно ли использовать такой подход, как подсказывает паттерн посредника, или есть другой метод?Поскольку у нас есть 1 страница для всего приложения, нам нужно что-то вроде DialogBoxes для взаимодействия с пользователем (в случае приложения, которое требует от пользователя представления некоторых данных), поэтому следует ли нам рассматривать такой DialogBox как отдельный вид и должен ли он иметь собственного докладчика?


Тем не менее, обычное поведение состоит в том, чтобы иметь 1 страницу на приложение, есть ли случаи, когда нам нужно иметь более 1 страницы, и как в таком случае мы должны создавать наше приложение?

Ответы [ 2 ]

2 голосов
/ 18 февраля 2012

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

Паттерном, уникальным для GWT, являются EventBus и GWTEvents (поиск GWT-событий в Google). Шина событий делает общение между представлениями и докладчиками простым и элегантным.

2 голосов
/ 18 февраля 2012

У вас может быть только одна HTML-страница, которая загружает приложение GWT, однако у вас будет столько страниц (прочитайте «Места»), сколько вы хотите. «Место» - это страница, которая должна содержать согласованную единицу функциональности (просмотр списка людей, панель инструментов и т. Д. - иногда у вас есть отдельная страница / место для добавления вещей, но вы можете так же легко сделать добавление, как всплывающий виджет на той же странице, что и список вещей)

В GWT (поскольку я определил свои приложения - другие могут отличаться) у меня есть место, действие / докладчик и UiBinder / View для каждой "страницы". Несмотря на то, что это не разные HTML-страницы, вы можете настроить PlaceHistoryHandler (URL-адрес карты для размещения) и ActivityMapper (место на карте для действия) таким образом, чтобы приложение выглядело так, что в нем столько же «страниц», сколько и «мест», хотя технически это одностраничное динамическое приложение javascript.

Кроме того, комбо Activity / Presenter + UiBinder / View + Place является своего рода организацией высокого уровня. Вы можете создавать виджеты. Обычно я просто создаю UiBinder (NewThingWidget.java + NewThingWidget.ui.xml), а NewThingWidget расширяет PopupPanel и принимает обратный вызов, например:

public interface NewThingCallback(){
    public void onNewThing(Thing obj);
    public void onCancel();
}

И тогда ваш NewThingWidget может сделать свое дело и вернуть контроль и, возможно, новое Вещи, когда это будет сделано.

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

Я бы порекомендовал посмотреть полные учебники по приложениям, которые имеют несколько "мест"

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