Подтвердить что ты не робот

Масштабирование gwt "Контакты" (образец проекта) AppController с MVP

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

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

Моя проблема заключается в этом onValueChange в AppController (я включил его ниже для тех, кто не видел образец проекта). Он выполняет сравнение строк в токенах, отправленных в историю, и создает экземпляр соответствующего ведущего для обработки действия. Это все прекрасно и dandy для примера приложения с 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);
      }
    }
  } 
}
4b9b3361

Ответ 1

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

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

Ответ 2

Единственное событие, которое должен получить метод onValueChange, это "изменение вида". Учитывая, что каждое условие - 1 строка, это никогда не будет ТАКОЙ большой. В итоге вы будете хорошо использовать этот шаблон.

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