Масштабирование gwt "Contacts" (пример проекта) AppController с MVP - PullRequest
12 голосов
/ 01 апреля 2010

Я только изучаю 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);
      }
    }
  } 
}

Ответы [ 2 ]

6 голосов
/ 02 апреля 2010

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

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

0 голосов
/ 20 мая 2010

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

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

...