📅  最后修改于: 2023-12-03 14:40:52.485000             🧑  作者: Mango
Drools 是一个基于规则的业务逻辑管理系统,可以帮助开发者管理业务逻辑并实现更高效的决策管理。本文介绍 Drools 中常用术语及其含义。
Rule 是指规则,通常是一句描述了业务逻辑的语句。Rule 由多个部分构成:条件、动作和触发事件。规则引擎根据条件来判断是否应该执行某个 Rule,一旦满足条件,规则引擎将执行对应的动作。
示例代码:
规则格式:
rule " <ruleName> "
dialect "java"
when
<condition>
then
<action>
end
示例:
rule "Person is baby" //规则名称
dialect "java" //设定语言
when
person.getAge() < 3 //当 person 年龄小于3岁时
then
System.out.println("This person is a baby"); //执行动作
end
Fact 是事实,指业务过程中的一个实例对象。Fact 可以是一个简单的 Java 对象,也可以是一个复杂的业务对象。事实与规则引擎之间的联系是通过 working memory 实现的。
示例代码:
实例对象:
public class Person {
private String name; //姓名
private int age; //年龄
private boolean married; //婚否
//Setters & Getters
}
实例对象生成:
Person person = new Person();
person.setName("zhangsan");
person.setAge(20);
person.setMarried(false);
Fact 对象:
KieSession kieSession = ...; //获取 KieSession 对象
kieSession.insert(person); //将实例对象插入 working memory 中
Working Memory 是执行规则的环境,其中会存储所有与业务过程有关的事实对象,并且会用现有的事实对象来匹配规则并执行规则的动作部分。
Working Memory 分为两个部分:Working Memory Entry 和 Rule Flow Memory。Working Memory Entry 存储着有关实例对象的信息,Rule Flow Memory 则用于管理规则流程的执行。
示例代码:
KieSession kieSession = ...; //获取 KieSession 对象
kieSession.insert(person); //将实例对象插入 working memory 中
kieSession.fireAllRules(); //执行所有规则
Agenda 是规则引擎的执行计划,决定了规则的执行顺序。Agenda 中包含很多规则,并按照优先级将规则排序。Drools 会优先执行优先级高的规则,当有多个规则优先级相同时,会随机选择一个执行。
示例代码:
KieSession kieSession = ...; //获取 KieSession 对象
kieSession.getAgenda().getAgendaGroup("groupName").setFocus(); //设置执行计划
Working Memory Event 是 working memory 中事实变化的通知事件,通常是对事实对象作出的更改、插入或者删除等操作。
示例代码:
public class WorkingMemoryEventListenerImpl implements WorkingMemoryEventListener {
public void objectUpdated(ObjectUpdatedEvent event) {
...
}
public void objectInserted(ObjectInsertedEvent event) {
...
}
public void objectDeleted(ObjectDeletedEvent event) {
...
}
}
KieSession kieSession = ...; //获取 KieSession 对象
kieSession.addEventListener(new WorkingMemoryEventListenerImpl()); //注册 WorkingMemoryEventListenerImpl