Drools规则写作最佳实践

Drools规则写作最佳实践,drools,rule-engine,rete,Drools,Rule Engine,Rete,我一直在读一篇关于Drools performance()的文章,它解释了如何创建Rete树和节点,Drools如何对它们进行索引,以及为什么Drools中对象数量的增加几乎不会影响执行它所花费的总时间。 以智能方式编写的规则可以大大减少Rete树中的节点数,从而进一步提高性能 我想知道是否有Drools规则编写最佳实践,这样我就可以以一种可以尽快执行的方式编写它们 谢谢。我可以列出一些 将最具限制性的条件放在顶部 在规则中使用相同的条件顺序 除非必须,否则不要使用eval 把评估放在你情况的

我一直在读一篇关于Drools performance()的文章,它解释了如何创建Rete树和节点,Drools如何对它们进行索引,以及为什么Drools中对象数量的增加几乎不会影响执行它所花费的总时间。 以智能方式编写的规则可以大大减少Rete树中的节点数,从而进一步提高性能

我想知道是否有Drools规则编写最佳实践,这样我就可以以一种可以尽快执行的方式编写它们

谢谢。

我可以列出一些

  • 将最具限制性的条件放在顶部
  • 在规则中使用相同的条件顺序
  • 除非必须,否则不要使用eval
  • 把评估放在你情况的最底层
  • 不要在结果中使用if语句
  • 对布尔值使用快捷方式会导致Drools 5.4出现JIT错误,因此请将它们用作
    House(windowOpen==true)
    而不是
    House(windowOpen)
  • 不要使用
    显著性
    ,在大多数情况下,它会导致维护困难

这当然不完整,只有我的2美分…

我最近开始做同样的工作,所以我可能不是回答这个问题的完美人选,但是

  • 你认为的条件应该放在最优先的位置 把它们放在上面
  • 您使用的then条件应该非常认真地准备
  • 计划使用EclipseDroolUI来创建好的规则
  • 切勿尝试在then部件内使用
    if语句
  • 对布尔值使用快捷方式,因为它们通常会导致错误
  • 始终遵循RWTE的模式,即1。规则2。当3。然后是4。结束
  • 避免使用显著性,它在大多数情况下会引起麻烦
  • 尝试将规则与自定义类而不是预定义类集成 设置为用于您的操作
  • 当零件应互连时,您使用的条件 和NOTNULL(即,条件应链接到 存在)
  • 正确使用导入语句
  • 当然,这个列表是永无止境的,所以请不断更新 你自己……)
我建议阅读沃尔夫冈·劳恩的《生产系统中的设计模式》白皮书。这是我见过的唯一一个在Drools中记录规则设计最佳实践的体面尝试。您可以从Red Hat下载它,交换一些联系方式: