消除GWT ActivityMapper样板

Rob*_*anu 13 gwt gwt-gin gwt-mvp

我正在使用GWT Activities and Places框架来构建我的应用程序,结果很好.但令我恼火的一件事是,ActivityMapper实现是(1)接收应用程序中的所有视图(2)包含一个巨大的if/else块,用于根据接收的位置实例化活动.随着观看次数的增加,它只会变得更糟.

ActivityMapper截图

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

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

mma*_*zur 1

实际上我正在使用自定义样板代码来完成此任务:

public class PuksaActivityMapper implements ActivityMapper {
private HashMap<String, ActivityContainer> mappings;

@Inject
private SearchResultActivityContainer searchResultContainer;
@Inject
private HelloActivityContainer helloContainer;

@Override
public Activity getActivity(Place place) {
    ActivityContainer container = getMappings().get(place.getClass().getName());

    return container.getActivity(place);
}

public HashMap<String, ActivityContainer> getMappings() {
    if (mappings == null) {
        mappings = new HashMap<String, ActivityContainer>();

        mappings.put(ShowResultsPlace.class.getName(), searchResultContainer);
        mappings.put(HelloPlace.class.getName(), helloContainer);
    }
    return mappings;
}
Run Code Online (Sandbox Code Playgroud)

}

其中ActivityContainer是一个简单的工厂类型(此时可以使用经典的ioc方法)。

当然,现在它只是通过地图查找/填充来更改“if 块”,但与Gin 多重绑定(当前不存在)相结合可以完成它的工作。

另外,Gin 增强功能- GWT 活动/场所的通用 GinModule 看起来很有前途。