1

所以我正在编写一个 Web 服务架构,其中包括FunctionProvider实际处理请求的类,以及一个Endpoint接收请求并将请求委托给适当的主类FunctionProvider

我不确切知道FunctionProvider运行时可用的 s ,所以我需要能够在我的主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(上面可能是错误的,但希望能证明我的意图)。

什么是最好的方法来实现这一点而不会变得 hacky?

4

1 回答 1

2
  • 不要让 FunctionProviders 自行注册。通过一些应用程序初始化引导端点。使用 FunctionProviders 列表调用。这样您就可以配置优先级(如果两个提供商都声称他们可以处理请求怎么办?)。您现在设置它的方式需要以某种方式调用该类来触发静态构造函数,这太间接了。
  • 如果检测 FunctionProvider 是否支持给定请求很简单,请考虑将其作为配置的一部分。如果是在请求中,则将其映射到FunctionProvider。这会更好地分散关注点。如果检测很复杂,请考虑在 FunctionProvider 的单独类中进行。
  • 通过配置委托/函数指针,您可能完全不需要 FunctionProvider(不确定 Java 是否/如何支持委托)。
于 2012-12-08T00:25:19.850 回答