12

我只是在学习 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);
      }
    }
  } 
}
4

2 回答 2

6

您使用大规模 GWT 应用程序提出了一个有效点。我最近开发了超过 50.000 行的 GWT 门户应用程序,我们正沉浸在事件和复杂的开关/处理程序模式中。这里有一篇很好的博客文章,描述了这会变得多么可怕,并暗示了一个解决方案(见可怕的脚注)。

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

于 2010-04-02T11:52:26.540 回答
0

onValueChange 方法应该接收的唯一事件是“视图更改”事件。考虑到每个条件都是 1 行,它永远不会那么大。最后,您会很好地使用该模式。

正如 Lars 所说,将 UiBinder 与 MVP 模式结合起来很容易,并且将大大减少代码行数,并使您的代码更容易修改。

于 2010-05-20T13:31:31.957 回答