1.5.2 事实对象

事实对象(fact)是Drools用来评估条件和执行结果的模型对象,也称为事实数据。

❑事实对象可以简单地理解为Java的POJO类(Plain Old Java Object)。

❑事实对象可以有自己的函数,提供给规则引擎在“那么”的部分调用。

❑事实对象可以从数据库中加载。

❑事实对象不需要继承任何类或实现某些接口。

Drools要求这些事实对象必须遵从Java Beans的规范。事实对象根据其产生方式可以分为以下两种类型。

❑Stated fact(陈述事实对象):规则调用者提供给规则的事实对象。

❑Inferred fact(推断事实对象):规则引擎根据调用者提供的陈述事实通过计算推导出的事实对象,推断事实可能会随着时间的变化而改变。

比如,在一个商品促销的场景下,我们要根据顾客的会员级别和购买金额计算出顾客此次购物的折扣率,顾客的会员级别和此次购买金额是陈述事实,而根据会员级别和购买金额计算出的折扣率就是推断事实。

Drools规则引擎用规则中的“如果”部分进行规则触发条件的判断,判断的依据就是事实对象。这些事实对象既可以是陈述事实,也可以是推断事实。如果满足触发条件,则触发规则(触发规则的“那么”部分)。规则通常会在“那么”部分对既有的事实数据进行更新/删除操作或产生新的事实数据,这些变动过的事实数据会再次引起规则引擎的条件判断而触发其他规则。因此规则不是被调用者直接触发的,而是由Drools的决策引擎触发的。