2

有没有人见过/尝试编写使用 Guice 风格配置系统的服务定位器模式?

目前我有一个使用命令模式的 GWT 项目(恰好使用 GWT-RPC),其中我的 RPC servlet 看起来像这样......

public interface TransactionService extends RemoteService {

    <T extends Response> T execute(Action<T> action);
}

在我当前执行方法的实现中,我这样做......

if(action instanceof SomeActionImpl){
  doSomeActionImpl((SomeActionImpl)action);
}else if(action instanceof SomeActionImpl2){
  doSomeActionImpl2((SomeActionImpl2)action);
}

我想做的是找出一种方法来摆脱巨大的 if 语句。我需要某种方式来注册 ActionImpl1 的类应该委托给 TransactionNService 的另一个实现。

有任何想法吗?我正在考虑向 HashMap 添加条目,其中键是 Action 的类,值是 ServiceImpl 的类。我有一个对 ServiceImpl 类的引用,我可以使用 Guice 来获取 TransactionService 的实例。

4

1 回答 1

2

看看 gwt-dispatch ( http://code.google.com/p/gwt-dispatch/ ) 中的 net.customware.gwt.dispatch.server.DefaultActionHandlerRegistry 类;它完全符合您的建议。这是存储处理程序的成员变量:

私人最终地图<Class<? 扩展 Action<?>>、ActionHandler<?、?>> 处理程序;

如果要在服务器端执行处理程序,请使用 gwt-dispatch 服务器端组件;如果它是客户端的东西,那么考虑在 DefaultActionHandlerRegistry 上建模你的调度类。

于 2009-09-16T00:58:47.313 回答