gwt - 消除 GWT ActivityMapper 样板

标签 gwt gwt-mvp gwt-gin

我正在使用 GWT 事件和地点框架来构建我的应用程序,结果很好。让我烦恼的一件事是 ActivityMapper实现是 (1) 接收应用程序中的所有 View (2) 包含一个巨大的 if/else block ,用于根据接收到的位置实例化事件。随着观看次数的增加,情况只会变得更糟。

ActivityMapper screenshot

我已经在使用 Gin但我不知道如何在这里使用它。

如何减少或消除我的 ActivityMapper 中的样板?

最佳答案

还没有很好的答案。我心中有代码生成方案,但目前这一切都在白板上乱涂乱画。对于 Gin 用户来说,Place Scope 似乎很方便。

回复:if/else 级联,一种常见的方法是让您的 Place 对象实现访问者模式。例如。假设您已为您的事件设置了 AssistedInject(请原谅草率的现场注入(inject),这只是一个草图)。

class BasePlace extends Place {
    <T> T acceptFilter(PlaceFilter filter);
}

interface PlaceFilter<T> {
  T filter(FooPlace place);
  T filter(BarPlace place);
  T filter(BazPlace place);
}

public class MainActivities implements ActivityMapper {
  @Inject FooFactory fooMaker;
  @Inject BarFactory barMaker;
  @Inject BazFactory bazMaker;

  public Activity getActivity(PlaceChangeEvent e) {
     return ((BasePlace)e.getPlace()).acceptFilter(
       new PlaceFilter<Activity>() {
         Activity filter(FooPlace place) {
           return fooMaker.create(place);
         }
         Activity filter(BarPlace place) {
           return barMaker.create(place);
         }
         Activity filter(BazPlace place) {
           return bazMaker.create(place);
         }
       })         
   }
}

关于gwt - 消除 GWT ActivityMapper 样板,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5802747/

相关文章:

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

java - GWT - GIN - GWTP - 调度程序注入(inject)问题

java - EventHandler 何时以及为何要求对象是最终的?

java - 如何收集多个异步回调?

gwt - GWT 中的 BigDecimal 序列化

gwt - 通过 GWT 平台实现多个 View ?

gwt - GWTP 应用程序中的 GIN 绑定(bind)问题

java - 是否可以在运行时从 GWT 获取通用参数类型

java - 如何在 gwt Web 应用程序的后端运行实际的 java

gwt - GWT拖放如何在放置事件中获取小部件源