假设我添加了一些对象
{O1,O2,O3}
和规则
{R1,R2,R3}
在我的知识库中
当我解除所有规则时,执行顺序如下:
R1 <on> O1
R1 <on> O2
R1 <on> O3
R2 <on> O1
R2 <on> O2
R2 <on> O3
R3 <on> O1 (add to passed object cache)
R3 <on> O2 (add to passed object cache)
R3 <on> O3 (add to passed object cache)
这意味着我不能将传递的对象放在缓存中,直到最后一个循环
如何将执行顺序更改为:
R1 <on> O1
R2 <on> O1
R3 <on> O1 (add to passed object cache)
R1 <on> O2
R2 <on> O2
R3 <on> O2 (add to passed object cache)
R1 <on> O3
R2 <on> O3
R3 <on> O3 (add to passed object cache)
答案 0 :(得分:1)
来自Drools Expert User Guide, section 4.3.4.2:
作为一般规则,最好不要依赖以任何特定顺序触发的规则,并且在不担心“流程”的情况下编写规则。
即使您看到的执行顺序也无法保证。这个例子似乎是关于命令式的风格控制,意思是“首先执行此操作,然后执行此操作,然后将对象放在某处”。规则引擎是这项工作的错误工具,像Java这样的编程语言更适合对循环等进行精细控制。