如果其他规则被解雇,如何触发规则?

时间:2013-11-14 04:22:36

标签: java drools rule-engine business-rules

假设我有两个规则 -

如果rule1conditionA满意,则会触发{p> conditionB

如果rule2conditionC D满意,则会触发{p> condition

我想写一个rule3,如果触发了rule1和rule2,应该触发它?理想情况下,我希望能够使用运算符,例如

fire rule3 if rule1 **AND** rule2 have been fired

fire rule3 if either rule1 **OR** rule2 has been fired. 

换句话说,我如何在另一条规则中引用规则?

我显然可以在rule3中使用conditionsABCD,但我确信必须有一种优雅的方式来处理这种情况。

理想情况下,我想将rule1,rule2和rule3保存在一个DRL文件中。

2 个答案:

答案 0 :(得分:4)

当conditionA和conditionB可以命名为rule1ok时,可以在rule1上添加一个事实,对于rule2ok,可以在rule2ok中添加相同的事实。 然后,您可以检查规则3的新条件rule1ok和rule2ok。

答案 1 :(得分:0)

我一直教导的四个最佳实践之一是规则不应该调用或引用其他规则。

当您有规则引用其他规则时,您的规则会陷入实施细节中,并且不再仅仅关注您的政策。

其他最佳做法之一是规则不应重复其他规则的条件。

所以... @ zenbeni上面的回答是好建议。当rule1为true时,您可以考虑在策略模型中的含义,并在此基础上在模型中派生出新事实。规则2也是如此。