Масштабирование контактов gwt (пример проекта) AppController с помощью MVP

Я только изучаю GWT, поэтому все еще пытаюсь разобраться во всех его особенностях и особенностях. Я читаю приведенный ими пример, иллюстрирующий паттерн MVP, и в значительной степени понимаю его, за исключением того, что меня интересует одна вещь.

AppController, который они используют, реализует интерфейс ValueChangeHandler, а метод onValueChange запускается при изменении истории.

Моя проблема связана с этим onValueChange в AppController (я включил его ниже для всех, кто не видел образец проекта). Он выполняет сравнение строк на отправленном токене истории и создает экземпляр соответствующего презентатора для обработки действия. Все это хорошо и красиво для примера приложения с тремя действиями, но как это масштабировать до реального приложения с большим количеством действий?

Если придерживаться этого шаблона, это приведет к довольно большому / уродливому 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);
      }
    }
  } 
}

person brad    schedule 01.04.2010    source источник


Ответы (2)


Вы поднимаете допустимую точку с помощью крупномасштабного приложения GWT. Недавно я работал над портальным приложением GWT с более чем 50 000 строками, и мы погрязли в событиях и сложных шаблонах переключателей / обработчиков. Хорошая запись в блоге доступна здесь это описывает, насколько это может быть ужасно, а также намекает на решение (см. ужасную сноску).

Однако новая функциональность GWT2 UIBinder и MVP действительно упрощает ситуацию. Фактически, автор вышеупомянутого сообщения в блоге написал о местах framework (который является частью GWT 2.1) здесь.

person Lars Tackmann    schedule 02.04.2010

Единственное событие, которое должен получить метод onValueChange, - это событие «изменение представления». Учитывая, что каждое условие - это 1 строка, оно никогда не будет НАСТОЛЬКО большим. В конце концов, вы будете в порядке, используя этот шаблон.

Однако, как сказал Ларс, объединить UiBinder с шаблоном MVP легко, это значительно сократит количество строк кода и упростит изменение вашего кода.

person Zwik    schedule 20.05.2010