假设我有两个规则 -
如果rule1
和conditionA
满意,则会触发{p> conditionB
。
如果rule2
和conditionC
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文件中。
答案 0 :(得分:4)
当conditionA和conditionB可以命名为rule1ok时,可以在rule1上添加一个事实,对于rule2ok,可以在rule2ok中添加相同的事实。 然后,您可以检查规则3的新条件rule1ok和rule2ok。
答案 1 :(得分:0)
我一直教导的四个最佳实践之一是规则不应该调用或引用其他规则。
当您有规则引用其他规则时,您的规则会陷入实施细节中,并且不再仅仅关注您的政策。
其他最佳做法之一是规则不应重复其他规则的条件。
所以... @ zenbeni上面的回答是好建议。当rule1为true时,您可以考虑在策略模型中的含义,并在此基础上在模型中派生出新事实。规则2也是如此。