次の方法で共有


ルール アクションの副作用

アクションを実行するとオブジェクトの状態、または条件で使用される期間に影響を与える場合、そのアクションは、オブジェクトに対する副作用があると見なされます。

次の規則があるとします。

規則 1

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

規則 2

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

この場合、 OrderForm.UpdateStatusOrderForm.Status に副作用があると言います。 これは、 OrderForm.UpdateStatus に副作用があることを意味するものではありません。代わりに、 OrderForm.Status が 1 つ以上のアクションの影響を受ける可能性があります。

既定では、.NET クラス メンバーの SideEffects プロパティは true です。これにより、ルール エンジンが副作用を伴うメンバーをキャッシュできなくなります。 この例では、ルール エンジンは作業メモリに OrderForm.Status をキャッシュしません。代わりに、ルール 1 が評価されるたびに 、OrderForm.Status の最新の値が取得されます。 SideEffects プロパティが false に設定されている場合、ルール エンジンは OrderForm.Status を初めて評価する際に値をキャッシュしますが、(前方チェーンのシナリオでは) 後の評価ではキャッシュされた値を使用します。

現在、ビジネス ルール作成ツールでは、ユーザーが SideEffects を変更する方法は提供されていませんが、 SideEffects プロパティは、ビジネス ルール フレームワークを使用してプログラムによってのみ設定できます。 これをバインド時に設定するには、 ClassMemberBinding クラスを 使用して、ルールの条件とアクションで使用されるオブジェクト のメソッド、プロパティ、フィールドを指定します。 ClassMemberBinding には、メンバーにアクセスしてその値を変更するかどうかを示すブール値を含む 、SideEffects プロパティがあります。

参照

ルール エンジン