1

だから私はFunctionProvider、リクエストの実際の処理を行うクラスと、リクエストEndpointを受け取って適切なに委任するメインクラスを含むWebサービスアーキテクチャを書いていますFunctionProvider

実行時に利用可能な sが正確にはわからないFunctionProviderので、それらをメイン クラスに「登録」し (それが正しい言葉である場合) Endpoint、クエリを実行して着信要求と一致するかどうかを確認できるようにする必要があります。

public class MyFunc implements FunctionProvider{
  static {
    MyEndpoint.register(MyFunc);
  }
  public Boolean matchesRequest(Request req){...}
  public void processRequest(Request req){...}
}

public class MyEndpoint{
  private static ArrayList<FunctionProvider> functions = new ArrayList<FunctionProvider>();
  public void register(Class clz){
    functions.add(clz);
  }
  public void doPost(Request request){
    //find the FunctionProvider in functions
    //matching the request
  }
}

私は実際には、このようなリフレクティブ Java をあまり実行したことがありません (上記は間違っている可能性がありますが、うまくいけば私の意図を示しています)。

ハックせずにこれを実装する最も良い方法は何ですか?

4

1 に答える 1

2
  • FunctionProviders を自己登録させないでください。アプリケーションの初期化を介してエンドポイントをブートストラップします。FunctionProvider のリストを使用して呼び出します。そうすれば、優先度を構成できます (2 つのプロバイダーが両方とも要求を処理できると主張している場合はどうなるでしょうか?)。ここで設定した方法では、何らかの方法でクラスを呼び出して静的コンストラクターをトリガーする必要があり、間接的すぎます。
  • FunctionProvider が特定のリクエストをサポートしているかどうかを検出するのが簡単でない場合は、それを構成の一部にすることを検討してください。これがリクエスト内にある場合は、そのFunctionProviderにマップします。これにより、懸念事項が少しうまく分離されます。検出が複雑な場合は、FunctionProvider とは別のクラスで行うことを検討してください。
  • デリゲート/関数ポインターを構成することにより、FunctionProvider が完全に必要になるのを防ぐことができます (Java がデリゲートをサポートしているかどうか、またはどのようにサポートしているかはわかりません)。
于 2012-12-08T00:25:19.850 に答える