2

Guiceスタイルの構成システムを使用するサービスロケーターパターンを見た/書き込もうとした人はいますか?

現在、コマンドパターンを使用するGWTプロジェクト(たまたまGWT-RPCを使用)があり、RPCサーブレットは次のようになっています...

public interface TransactionService extends RemoteService {

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

executeメソッドの現在の実装では、これを行います...

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

私がやりたいのは、巨人のifステートメントを取り除く方法を見つけることです。ActionImpl1のクラスをTransactioNServiceの別の実装に委任する必要があることを登録する何らかの方法が必要になります。

何か案は?キーがActionのクラスで、値がServiceImplのクラスであるHashMapにエントリを追加することを考えていました。1つはServiceImplクラスへの参照があり、Guiceを使用してTransactionServiceのインスタンスを取得できます。

4

1 に答える 1

2

gwt-dispatch(http://code.google.com/p/gwt-dispatch/);のnet.customware.gwt.dispatch.server.DefaultActionHandlerRegistryクラスを見てください。それはあなたが提案していることを正確に行います。ハンドラーを格納するメンバー変数は次のとおりです。

プライベートファイナルマップ<クラス<?Action <?>>、ActionHandler <?、?>>ハンドラーを拡張します。

サーバー側でハンドラーを実行する場合は、gwt-dispatchサーバー側コンポーネントを使用します。クライアント側のものである場合は、DefaultActionHandlerRegistryでディスパッチングクラスをモデル化することを検討してください。

于 2009-09-16T00:58:47.313 に答える