场景
Web 服务从其他系统接收 XML 形式的请求,根据该请求的内容,Web 服务应执行任意数量的用户可定义的任务(例如将 XML 的内容存储到数据库、提取某些值、调用其他服务等)。请求系统的行为无法更改(例如,为不同的事物调用不同的操作)。
拟议设计
我建议的设计是有一个类似的界面......
interface PipelineTask {
public void Run(String xml);
}
例如,针对每个用户操作实现此...
public class LogToDatabaseTask implements PipelineTask {
public void Run(String xml) {
db.store(xml); // some call to database to store.
}
}
然后是一个包含规则(可能是 XPath 表达式)的数据库表,以及接收到的文档满足这些规则时要调用的类。然后我会使用反射 - 或者可能是工厂(?) - 来调用正确的实现并运行它。
问题
对我来说,听起来应该有某种现有的模式来实现类似的东西,但我错过了并且无法在任何地方在线找到。这种方法有意义吗?或者是否有更好、也许更灵活的方法来做到这一点?
最佳答案
正如您已经提到的,规则似乎很适合这种情况。您可以定义一个规则,该规则采用与当前状态相关的事实并提供序列中的下一个操作。下面以一个简单的java规则方法为例。您还可以使用像 drools 这样的规则框架。规则的响应可以与工厂或策略一起使用:
例如,考虑操作的顺序:
UPDATE_DB
EXTRACT_VALUES
INVOKE_XYZ_SERVICE
结束
对于每个 Web 服务请求,请在每个步骤后检查规则并执行操作,直到收到包含下一个操作的规则响应END。规则请求还包含输入文档的内容:
public RuleResponse execute(RuleRequest request) {
//initialization and extraction code here
if(request.previousAction.equals("EXTRACT_VALUES") && ....) {
RuleResponse.nextAction = "INVOKE_XYZ_SERVICE".
}
return response;
}
关于java - 根据输入执行 "pipeline"个用户定义操作的设计,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25583726/