Guiceスタイルのサービスロケーター
-
07-07-2019 - |
質問
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つは、Guiceを使用してTransactionServiceのインスタンスを取得できるServiceImplクラスへの参照を持っていることです。
解決
gwt-dispatchのnet.customware.gwt.dispatch.server.DefaultActionHandlerRegistryクラスを見てください( http://code.google.com/p/gwt-dispatch/ );それはまさにあなたが提案していることをします。ハンドラーを格納するメンバー変数は次のとおりです。
プライベート最終マップ<!> lt; Class <!> lt ;?拡張Action <!> lt;?<!> gt; <!> gt;、ActionHandler <!> lt;?、?<!> gt; <!> gt;ハンドラー;
サーバー側でハンドラーを実行する場合は、gwt-dispatchサーバー側コンポーネントを使用します。クライアント側の場合は、DefaultActionHandlerRegistryでディスパッチクラスをモデリングすることを検討してください。