Java 如何仅在已触发其他规则的情况下触发规则?

Java 如何仅在已触发其他规则的情况下触发规则?,java,drools,rule-engine,business-rules,Java,Drools,Rule Engine,Business Rules,假设我有两条规则- 如果满足conditionA和conditionB,将触发rule1 如果满足条件c和条件D,将触发规则2 我想写一个rule3,如果触发了rule1和rule2,那么应该触发哪个?理想情况下,我希望能够使用运算符,例如- 如果触发了规则1**和**规则2,则触发规则3 fire rule3 if either rule1 **OR** rule2 has been fired. 换句话说,我如何在另一个规则中引用一个规则的触发 显然,我可以在规则3中使用conditio

假设我有两条规则-

如果满足
conditionA
conditionB
,将触发
rule1

如果满足
条件c
条件
D,将触发
规则2

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

如果触发了规则1**和**规则2,则触发规则3

fire rule3 if either rule1 **OR** rule2 has been fired. 
换句话说,我如何在另一个规则中引用一个规则的触发

显然,我可以在规则3中使用conditionsABCD,但我确信一定有一种优雅的方式来处理这种情况


理想情况下,我希望将规则1、规则2和规则3保存在一个DRL文件中

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

当条件a和条件B被命名为rule1ok时,您可以在规则1上添加一个事实,对于规则2和rule2ok,您也可以添加一个事实。
然后,您可以检查规则3的新条件rule1ok和rule2ok。

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

当您的规则引用其他规则时,您的规则将陷入实施细节中,不再只关注您的策略

其他最佳实践之一是,规则不应重复其他规则的条件


所以@zenbeni在上面的回答是一个很好的建议。当规则1为真时,可以考虑在策略模型中的含义,并在此基础上导出模型中的新事实。规则2也是如此。

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

当您的规则引用其他规则时,您的规则将陷入实施细节中,不再只关注您的策略

其他最佳实践之一是,规则不应重复其他规则的条件


所以@zenbeni在上面的回答是一个很好的建议。当规则1为真时,可以考虑在策略模型中的含义,并在此基础上导出模型中的新事实。规则2也是一样。

谢谢,这可能是一种方法。尽管我希望保持我的模型类干净,不在其中包含规则信息。我很乐意接受任何其他想法——我希望Drools本身有某种结构,允许在规则语言中引用规则的触发itself@gauravphoenix如果不想修改域类,可以在DRL中定义事实。正如@zenbeni所说,只需在DRL中创建最小类型进行推断。这里可以找到一个很好的解释:为了“添加事实”,我在DRL的RHS中使用了
insertLogical(Object)
。确保您知道使用
insert()
insertLogical()
,基于以下文档:谢谢,这可能是一种方法。尽管我希望保持我的模型类干净,不在其中包含规则信息。我很乐意接受任何其他想法——我希望Drools本身有某种结构,允许在规则语言中引用规则的触发itself@gauravphoenix如果不想修改域类,可以在DRL中定义事实。正如@zenbeni所说,只需在DRL中创建最小类型进行推断。这里可以找到一个很好的解释:为了“添加事实”,我在DRL的RHS中使用了
insertLogical(Object)
。根据以下文档,确保您知道使用
insert()
insertLogical()