Effets secondaires d'une action de règle
Si l'exécution d'une action affecte l'état d'un objet ou un terme d'une condition, cette action est considérée comme ayant un effet secondaire sur l'objet.
Supposons que les règles suivantes existent :
Règle 1
IF OrderForm.ItemCount > 100
THEN OrderForm.Status = "important"
Règle 2
IF OrderList.IsFromMember = true
THEN OrderForm.UpdateStatus("important")
Dans ce cas, OrderForm.UpdateStatus est dit avoir un effet secondaire sur OrderForm.Status. Cela ne signifie pas que OrderForm.UpdateStatus a des effets secondaires ; Au lieu de cela, OrderForm.Status est potentiellement affecté par une ou plusieurs actions.
Par défaut, la propriété SideEffects pour les membres de la classe .NET a la valeur true, ce qui empêche le moteur de règles de mettre en cache le membre avec des effets secondaires. Dans notre exemple, le moteur de règles ne met pas en cache OrderForm.Status dans la mémoire de travail ; au lieu de cela, il obtient la valeur la plus récente de OrderForm.Status chaque fois que la règle 1 est évaluée. Si la propriété SideEffects a la valeur false, le moteur de règles met en cache la valeur lorsqu’il évalue OrderForm.Status pour la première fois, mais pour les évaluations ultérieures (dans les scénarios de chaînage avant), il utilise la valeur mise en cache.
Actuellement, le compositeur de règles d’entreprise ne permet pas aux utilisateurs de modifier SideEffects. Toutefois, vous ne pouvez définir la propriété SideEffects que par programmation via l’infrastructure de règles d’entreprise. Vous définissez cette opération au niveau de la liaison, en utilisant la classe ClassMemberBinding pour spécifier les méthodes d’objet, les propriétés et les champs utilisés dans les conditions de règle et les actions. ClassMemberBinding a une propriété, SideEffects, qui contient une valeur booléenne indiquant si l’accès au membre modifie sa valeur.