规则操作副作用

如果执行某个操作会影响条件中所使用的对象或术语的状态,则将该操作视为对该对象具有副作用。

假设具有以下规则:

规则 1

IF OrderForm.ItemCount > 100   
THEN OrderForm.Status = "important"  

规则 2

IF OrderList.IsFromMember = true   
THEN OrderForm.UpdateStatus("important")  

在这种情况下, OrderForm.UpdateStatus 据说会对 OrderForm.Status 产生副作用。 这并不意味着 OrderForm.UpdateStatus 有副作用;相反, OrderForm.Status 可能会受到一个或多个操作的影响。

默认情况下,.NET 类成员的 SideEffects 属性为 true,这可以防止规则引擎缓存具有副作用的成员。 在我们的示例中,规则引擎不会将 OrderForm.Status 缓存在工作内存中;而是在每次评估规则 1 时获取 OrderForm.Status 的最新值。 如果 SideEffects 属性设置为 false,则规则引擎在首次评估 OrderForm.Status 时缓存值,但对于) (前向链接方案中的后续评估,它使用缓存的值。

目前,业务规则编辑器不提供用户修改 SideEffects 的方法,但是,只能通过业务规则框架以编程方式设置 SideEffects 属性。 设置在绑定时执行此操作,使用 ClassMemberBinding 类指定在规则条件和操作中使用的对象方法、属性和字段。 ClassMemberBinding 具有一个属性 SideEffects,该属性包含一个布尔值,该值指示访问成员是否更改其值。

另请参阅

规则引擎