使用MVP扩展gwt的"Contacts"(示例项目)AppController

bra*_*rad 12 java mvp gwt gwt-mvp

我只是在学习GWT,所以我还在努力解决它的所有怪癖和特征.我正在阅读他们给出的描述MVP模式的例子,我几乎得到它,除了我想知道一件事.

他们使用的AppController实现了ValueChangeHandler接口,并且在历史记录更改时触发onValueChange方法.

我的问题在于AppController中的onValueChange(我已将它包含在下面,供没有看过示例项目的人使用).它正在对发送的历史记录进行字符串比较,并实例化相应的演示者以处理该操作.对于具有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);
      }
    }
  } 
}
Run Code Online (Sandbox Code Playgroud)

Lar*_*ann 6

您使用大规模GWT应用程序提出有效点.我最近在50.000+线GWT门户应用程序上工作,我们被埋没在事件和复杂的开关/处理程序模式中.有可用的一个很好的博客文章在这里描述有多么可怕这可以成为,也暗示了一个解决方案(见可怕的脚注).

然而,新的GWT2 UIBinder和MVP功能确实简化了事情.事实上,上述博客文章的作者已经写了关于地方框架(这是GWT 2.1的一部分)在这里.