流口水-通过setFocus()重新使用规则-还是其他策略?

时间:2020-02-18 17:38:45

标签: java drools rule-engine kie

基本上,我处于数十个议程组的情况,大多数议程组是彼此分开执行的,并且全部使用相同规则的不同子集。

我当前的设置只涉及很多规则的复制/粘贴:

agenda-group "agenda_group_1"
rule "Rule_A"
rule "Rule_B"
rule "Rule_C"
rule "Rule_D"

agenda-group "agenda_group_2"
rule "Rule_A"
rule "Rule_C"
rule "Rule_D"
rule "Rule_E"

...等等。

议程组的调用是通过另一个服务的列表来控制的,因此我试图在顶层将其保持不变。

我的想法是通过遵循“每个议程1-规则”模式来重复使用规则实现:

agenda-group "agenda_group_1"
rule "agenda_group_1"
when
        x
then
        WorkingMemory workingMemory = drools.getWorkingMemory();
        workingMemory.setFocus("Rule_A");
        workingMemory.setFocus("Rule_B");
        workingMemory.setFocus("Rule_C");
        workingMemory.setFocus("Rule_D");
end

agenda-group "agenda_group_2"
rule "agenda_group_2"
when
        x
then
        WorkingMemory workingMemory = drools.getWorkingMemory();
        workingMemory.setFocus("Rule_A");
        workingMemory.setFocus("Rule_C");
        workingMemory.setFocus("Rule_D");
        workingMemory.setFocus("Rule_E");
end

...并在自己的可重复使用的议程组文件中实施规则。

我想知道这种方法通常是否适合我的需求?我有很多规则(和很多重复使用),性能对我来说是重要的考虑因素。

如果有更好的方法来完成重用规则,那么如果有人可以指出相关的文档或示例,我将不会感到惊讶。

鉴于我收到了要运行的固定议程组列表,因此我的选择可能会受到限制。

谢谢

0 个答案:

没有答案