Freigeben über


Seiteneffekte von Regelaktionen

Wenn sich die Ausführung einer Aktion auf den Zustand eines Objekts oder eines Ausdrucks auswirkt, der unter Bedingungen verwendet wird, wird diese Aktion als Nebeneffekt auf das Objekt angesehen.

Gehen Sie davon aus, dass wir die folgenden Regeln haben.

Regel 1

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

Regel 2

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

In diesem Fall soll OrderForm.UpdateStatus einen Nebeneffekt auf OrderForm.Status haben. Dies bedeutet nicht, dass OrderForm.UpdateStatus Nebenwirkungen hat; Stattdessen ist OrderForm.Status potenziell von einer oder mehreren Aktionen betroffen.

Standardmäßig ist die SideEffects-Eigenschaft für .NET-Klassenmember "true", wodurch verhindert wird, dass das Regelmodul das Element mit Nebenwirkungen zwischenspeichert. In unserem Beispiel speichert das Regelmodul " OrderForm.Status " im Arbeitsspeicher nicht zwischen; Stattdessen wird der up-to-Datumswert von OrderForm.Status jedes Mal abgerufen, wenn Regel 1 ausgewertet wird. Wenn die SideEffects-Eigenschaft auf "false" festgelegt ist, speichert das Regelmodul den Wert beim ersten Auswerten von OrderForm.Status zwischen, aber für spätere Auswertungen (in Vorwärtsverkettungsszenarien) verwendet es den zwischengespeicherten Wert.

Derzeit bietet der Business Rule Composer keine Möglichkeit zum Ändern von SideEffects, Sie können die SideEffects-Eigenschaft jedoch nur programmgesteuert über das Geschäftsregelnframework festlegen. Sie legen dies bei der Bindung fest, indem Sie die ClassMemberBinding-Klasse verwenden, um Objektmethoden, Eigenschaften und Felder anzugeben, die in Regelbedingungen und Aktionen verwendet werden. ClassMemberBinding verfügt über eine Eigenschaft SideEffects, die einen booleschen Wert enthält, der angibt, ob der Zugriff auf das Element seinen Wert ändert.

Siehe auch

Regelmodul