规则操作的副作用

如果作的执行会影响在条件中使用的对象或术语的状态,该作将被视为对对象产生副作用。

假设我们有以下规则。

规则 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 的最大 up-to日期值。 如果 SideEffects 属性设置为 false,则规则引擎在首次评估 OrderForm.Status 时缓存值,但之后的评估(在正向链场景中)使用缓存的值。

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

另请参阅

规则引擎