我是初学drools,背景是java。我已经获得了流口水的基本功能。
我继承了一个有效的大型drools项目,但似乎被黑客攻击了。大多数规则在“then”(后果?)中有许多嵌套的IF和ELSE语句。我相信这是不好的做法。任何人都可以证实,在互联网上提及材料是有用的。
除了可读性之外,还有哪些其他优点可以解决?
答案 0 :(得分:2)
我必须挖掘参考资料,但规则程序员的普遍同意是应该在规则的LHS /条件部分做出决定。简单的原因是Engine专用于“多模式/多对象”模式匹配问题的过程。即使有一个最终条件,其中某些操作对于真,假两者都是必要的,Drools语法提供了一个很好的解决方案,即扩展规则两次,一次是正数,一次是负数。
也就是说,偶尔的条件语句可以被容忍甚至是好的,例如,当它仅仅区分规则的RHS /后果部分的工作中的细节时。但“许多和嵌套”听起来相当糟糕 - 但也许这种“细节的区别”确实需要这样的逻辑。
至于好处:没有人可以在没有检查的情况下判断,然后需要经验丰富的法官。
答案 1 :(得分:1)
在LHS中尽可能多地进行评估的一个不可读性推理是性能。首先,它避免了不必要的规则激活,但它也通过缓存每个匹配的结果来显着提高性能,从而避免重新评估。
此缓存不适用于RHS上的条件逻辑。
这是您更改事实时调用更新/修改的一个原因。这有效地指示了先前缓存的与该事实相关的LHS评估的引擎可以被丢弃。
答案 2 :(得分:-2)
嵌套"if/else"
语句通常并不坏,因为逻辑操作对CPU没有压力,也不需要大量内存。
我不是Drools程序员,但我想,既然你提到了Java,它就是一个面向obj的高级编程语言。
如果可以组合多个if
语句,建议这样做是为了清晰,干净的编码,而不一定是性能。