Drools:结果中的条件

时间:2014-01-22 16:46:38

标签: drools

我是初学drools,背景是java。我已经获得了流口水的基本功能。

我继承了一个有效的大型drools项目,但似乎被黑客攻击了。大多数规则在“then”(后果?)中有许多嵌套的IF和ELSE语句。我相信这是不好的做法。任何人都可以证实,在互联网上提及材料是有用的。

除了可读性之外,还有哪些其他优点可以解决?

3 个答案:

答案 0 :(得分:2)

我必须挖掘参考资料,但规则程序员的普遍同意是应该在规则的LHS /条件部分做出决定。简单的原因是Engine专用于“多模式/多对象”模式匹配问题的过程。即使有一个最终条件,其中某些操作对于真,假两者都是必要的,Drools语法提供了一个很好的解决方案,即扩展规则两次,一次是正数,一次是负数。

也就是说,偶尔的条件语句可以被容忍甚至是好的,例如,当它仅仅区分规则的RHS /后果部分的工作中的细节时。但“许多和嵌套”听起来相当糟糕 - 但也许这种“细节的区别”确实需要这样的逻辑。

至于好处:没有人可以在没有检查的情况下判断,然后需要经验丰富的法官。

由于您要求提供参考:http://www.redhat.com/rhecm/rest-rhecm/jcr/repository/collaboration/sites%20content/live/redhat/web-cabinet/home/resourcelibrary/whitepapers/brms-design-patterns/rh:pdfFile.pdf

答案 1 :(得分:1)

在LHS中尽可能多地进行评估的一个不可读性推理是性能。首先,它避免了不必要的规则激活,但它也通过缓存每个匹配的结果来显着提高性能,从而避免重新评估。

此缓存不适用于RHS上的条件逻辑。

这是您更改事实时调用更新/修改的一个原因。这有效地指示了先前缓存的与该事实相关的LHS评估的引擎可以被丢弃。

答案 2 :(得分:-2)

嵌套"if/else"语句通常并不坏,因为逻辑操作对CPU没有压力,也不需要大量内存。 我不是Drools程序员,但我想,既然你提到了Java,它就是一个面向obj的高级编程语言。

如果可以组合多个if语句,建议这样做是为了清晰,干净的编码,而不一定是性能。