我有一个使用规则引擎将“动态逻辑”实现为Drools规则的系统。
对于每个客户端实现,使用针对该特定实现的drl文件实现自定义定价和税收计算逻辑。
rule 'abc'
when
name = 'X'
then
price= '12'
end
一条规则的条件取决于之前规则中的设置,因此基本上存在规则转换。
这真的很痛苦,因为drools规则不是顺序编程,也不是开发人员友好的。由于误解了drools如何评估,会引入大量错误。
是否有更好的“java / groovy”替代方案可以轻松取代它?
答案 0 :(得分:2)
我认为答案取决于你最终想要的最终解决方案。如果您想要将业务规则从规则引擎中拉出来并将它们放入java / groovy中,那么就不希望将它们从一个规则引擎中拉出来并进入另一个规则引擎。
你的问题似乎倾向于先前,所以我会解决这个问题。这种方法要非常小心。以前执行此操作的人似乎在使用Rete算法时采用了正确的方法,因为它听起来像一个规则的触发可以执行其他规则,这是很好的业务规则 - 它们不是顺序的,它们是声明性的。请记住,命令式软件主要是为工程师编写的,它不会在100%的时间内映射回现实世界:)如果你想将它移动到java / groovy中,那么你正在使用命令式语言,这可能会让你陷入if / then / else地狱。我建议如下:
顺便说一句:如果你不想沿着这条路走下去,那么我强烈建议接受一些关于Drools的训练,以便你了解引擎和Rete(如果你还没有)。如果您能够快速将规则转换为可实施的软件,那么您可以与客户取得一些重大胜利。