Effetti collaterali delle azioni delle regole
Se l'esecuzione di un'azione influisce sullo stato di un oggetto o su un termine utilizzato nelle condizioni, si dice che tale azione ha un effetto collaterale sull'oggetto.
Si supponga che esistano le seguenti regole:
Regola 1
IF OrderForm.ItemCount > 100
THEN OrderForm.Status = "important"
Regola 2
IF OrderList.IsFromMember = true
THEN OrderForm.UpdateStatus("important")
In questo caso, OrderForm.UpdateStatus ha un effetto collaterale su OrderForm.Status. Ciò non significa che OrderForm.UpdateStatus ha effetti collaterali; OrderForm.Status è invece potenzialmente interessato da una o più azioni.
Per impostazione predefinita, la proprietà SideEffects per i membri della classe .NET è true, che impedisce al motore delle regole di memorizzare nella cache il membro con effetti collaterali. Nell'esempio, il motore delle regole non memorizza nella cache OrderForm.Status nella memoria di lavoro; ottiene invece il valore più aggiornato di OrderForm.Status ogni volta che viene valutata la regola 1. Se la proprietà SideEffects è impostata su false, il motore delle regole memorizza nella cache il valore per la prima volta che valuta OrderForm.Status, ma per le valutazioni successive (negli scenari di concatenamento in avanti), usa il valore memorizzato nella cache.
Attualmente Business Rule Composer non consente agli utenti di modificare SideEffects, ma è possibile impostare solo la proprietà SideEffects a livello di codice tramite Business Rules Framework. Questa operazione viene impostata all'associazione usando la classe ClassMemberBinding per specificare metodi di oggetto, proprietà e campi usati nelle condizioni e nelle azioni delle regole. ClassMemberBinding ha una proprietà SideEffects che contiene un valore booleano che indica se l'accesso al membro modifica il relativo valore.