2012-02-16 46 views
3

假设我必须设计一个规则引擎,其中取决于静态配置规则,在运行时的责任链变化。实施这个问题的最佳设计模式是什么?最好的设计模式来创建一个规则引擎

其他例如, (1)过滤,(2)划分成子集(3),修改为

对于每个流,客户可以选择所有的三个或一些三个或没有的三个。

所以,我的程序集管道应该在运行时根据每个流的配置进行配置。

这是最好的设计模式吗?

+2

你似乎陷入了陷阱,认为一切都是通过设计模式解决的。告诉我们你想出了什么设计...... – 2012-02-16 10:04:48

+0

我正在考虑让一个规则引擎对象通过一个队列来传递所有流。第一个链是过滤,第二个是修改,第三个是分区。 – Vignesh 2012-02-16 10:12:40

+0

如果尚未为某个流配置特定的操作,它只会将该流传递给管道中的下一个流。这意味着我总是静态地为所有3个操作配置规则引擎。询问是否有办法为该流配置流水线动态地根据特定流的需要选择和选择操作 – Vignesh 2012-02-16 10:15:27

回答

4

我不确定我是否理解您的用例,但有些开源项目似乎完全符合您的需求。

首先,你有Apache Camel,它允许你配置路由(静态和/或动态)。通过这种方式,您可以根据配置的路由通过管道的每个组件路由事件流。

作为替代或除骆驼外,Drools FusionEsper是进行复杂事件处理(即事件过滤,关联,分离等)的两个开源项目。它们都支持动态添加/删除规则/查询。因此,例如,您可以将一条路径放入Drools/Esper会话中,而不是根据配置添加/删除规则/查询,以便执行所需的操作。

在我看来,你不需要创建一个“规则引擎”。你可以使用那里的东西。