Freigeben über


Nebeneffekte von Regelaktionen

Wenn die Ausführung einer Aktion Auswirkungen auf den Status eines Objekts oder einer in Bedingungen verwendeten Bedingung hat, hat diese Aktion einen Nebeneffekt auf das Objekt.

Angenommen, Sie haben die folgenden Regeln formuliert.

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 die Regel-Engine den Member mit Nebenwirkungen zwischenspeichert. In unserem Beispiel speichert die Regel-Engine OrderForm.Status nicht im Arbeitsspeicher zwischen. stattdessen wird bei jeder Auswertung von Regel 1 der aktuellste Wert von OrderForm.Status abgerufen. Wenn die SideEffects-Eigenschaft auf false festgelegt ist, speichert die Regel-Engine den Wert bei der ersten Auswertung von OrderForm.Status zwischen, verwendet jedoch für spätere Auswertungen (in Forward-Chaining-Szenarien) den zwischengespeicherten Wert.

Derzeit bietet der Business Rule Composer keine Möglichkeit für Benutzer, SideEffects zu ändern. Sie können die SideEffects-Eigenschaft jedoch nur programmgesteuert über das Business Rules Framework festlegen. Legen Sie 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 die Eigenschaft SideEffects, die einen booleschen Wert enthält, der angibt, ob der Zugriff auf den Member seinen Wert ändert.

Weitere Informationen

Regel-Engine