替换Drools规则的最佳方法

时间:2013-02-27 18:28:36

标签: rules drools-flow

我有一个使用规则引擎将“动态逻辑”实现为Drools规则的系统。

对于每个客户端实现,使用针对该特定实现的drl文件实现自定义定价和税收计算逻辑。

rule 'abc'
when
    name = 'X'
then
    price= '12'
end

一条规则的条件取决于之前规则中的设置,因此基本上存在规则转换。

这真的很痛苦,因为drools规则不是顺序编程,也不是开发人员友好的。由于误解了drools如何评估,会引入大量错误。

是否有更好的“java / groovy”替代方案可以轻松取代它?

1 个答案:

答案 0 :(得分:2)

我认为答案取决于你最终想要的最终解决方案。如果您想要将业务规则从规则引擎中拉出来并将它们放入java / groovy中,那么就不希望将它们从一个规则引擎中拉出来并进入另一个规则引擎。

你的问题似乎倾向于先前,所以我会解决这个问题。这种方法要非常小心。以前执行此操作的人似乎在使用Rete算法时采用了正确的方法,因为它听起来像一个规则的触发可以执行其他规则,这是很好的业务规则 - 它们不是顺序的,它们是声明性的。请记住,命令式软件主要是为工程师编写的,它不会在100%的时间内映射回现实世界:)

如果你想将它移动到java / groovy中,那么你正在使用命令式语言,这可能会让你陷入if / then / else地狱。我建议如下:

  1. 将此代码与代码库的其余部分隔离开来 - 将来,当业务更改规则时,您将对此代码进行大量维护。良好的界面设计和封装将为您带来更大的收获。
  2. 与您的商业客户一起开发某种类型的DSL,因此当他们说出“信用政策”之类的内容时,您确切地知道他们所指的是什么,并且可以适当地更改相关规则。
  3. 单元测试,单元测试,单元测试。这也适用于您当前的配置。如果您现在发现错误,为什么不进行测试?设置junit以创建对象并调用Drools引擎并测试响应并不需要很长时间。如果您添加一些循环来测试期望相同响应的变量范围,您可以立即进行数十万次测试。
  4. 顺便说一句:如果你不想沿着这条路走下去,那么我强烈建议接受一些关于Drools的训练,以便你了解引擎和Rete(如果你还没有)。如果您能够快速将规则转换为可实施的软件,那么您可以与客户取得一些重大胜利。