Я просто изучаю GWT, таким образом, я все еще пытаюсь разобраться во всех его причудах и функциях. Я прочитываю пример, который они дают иллюстрированию шаблона MVP, и я в значительной степени получаю его, кроме я задаюсь вопросом об одной вещи.
AppController, который они используют, реализует интерфейс ValueChangeHandler, и onValueChange метод инициирован, когда история изменяется.
Моя проблема с этим onValueChange в AppController (я включал его ниже для любого, кто не видел демонстрационный проект). Это делает сравнение строк на представленном маркере истории и инстанцирует соответствующего предъявителя для обработки действия. Это все великолепно для демонстрационного приложения с 3 действиями, но как можно было бы масштабировать это к реальному приложению со значительно большим количеством действий?
Придерживание этого шаблона привело бы к довольно большому/ужасному else if
, но я все еще слишком плохо знаком с GWT (и Java) для выведения лучшего шаблона для объемных приложений.
Любая справка значительно ценится!
public class AppController implements Presenter, ValueChangeHandler<String> {
...
public void onValueChange(ValueChangeEvent<String> event) {
String token = event.getValue();
if (token != null) {
Presenter presenter = null;
if (token.equals("list")) {
presenter = new ContactsPresenter(rpcService, eventBus, new ContactsView());
}
else if (token.equals("add")) {
presenter = new EditContactPresenter(rpcService, eventBus, new EditContactView());
}
else if (token.equals("edit")) {
presenter = new EditContactPresenter(rpcService, eventBus, new EditContactView());
}
if (presenter != null) {
presenter.go(container);
}
}
}
}
Вы поднимаете допустимую точку с помощью крупномасштабного приложения GWT. Я недавно работал над 50.000+ строк в портальном приложении GWT, и мы погрязли в событиях и сложных шаблонах переключателей / обработчиков. Есть хорошая запись в блоге здесь , в которой описывается, насколько ужасным это может стать, а также намекает на решение (см. ужасная сноска ).
Однако новая функциональность GWT2 UIBinder и MVP действительно упрощает ситуацию. Фактически, автор вышеупомянутого сообщения в блоге написал о фреймворке places (который является частью GWT 2.1) здесь .
Единственное событие, которое должен получать метод onValueChange - это событие "изменение вида". Учитывая, что каждое условие - это 1 строка, оно никогда не будет таким большим. В конце концов, вы будете в порядке, используя этот шаблон.
Как сказал Ларс, сочетать UiBinder с шаблоном MVP очень просто, это значительно сократит количество строк кода и сделает ваш код более легким для модификации.