ルール アクションの副作用
アクションを実行するとオブジェクトの状態、または条件で使用される期間に影響を与える場合、そのアクションは、オブジェクトに対する副作用があると見なされます。
次の規則があるとします。
規則 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 が 1 つ以上のアクションの影響を受ける可能性があります。
既定では、.NET クラス メンバーの SideEffects プロパティは true です。これにより、ルール エンジンが副作用を伴うメンバーをキャッシュできなくなります。 この例では、ルール エンジンは作業メモリに OrderForm.Status をキャッシュしません。代わりに、ルール 1 が評価されるたびに 、OrderForm.Status の最新の値が取得されます。 SideEffects プロパティが false に設定されている場合、ルール エンジンは OrderForm.Status を初めて評価する際に値をキャッシュしますが、(前方チェーンのシナリオでは) 後の評価ではキャッシュされた値を使用します。
現在、ビジネス ルール作成ツールでは、ユーザーが SideEffects を変更する方法は提供されていませんが、 SideEffects プロパティは、ビジネス ルール フレームワークを使用してプログラムによってのみ設定できます。 これをバインド時に設定するには、 ClassMemberBinding クラスを 使用して、ルールの条件とアクションで使用されるオブジェクト のメソッド、プロパティ、フィールドを指定します。 ClassMemberBinding には、メンバーにアクセスしてその値を変更するかどうかを示すブール値を含む 、SideEffects プロパティがあります。