規則動作的副作用
若執行動作會影響到物件的狀態或條件中使用的詞彙,那麼該動作即視為對物件有副作用。
假設我們有下列規則。
規則 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,其中包含布林值,指出存取成員是否變更其值。