0

Droolsルールを定義するとき、オブジェクトグラフに対応するための最良の方法は何ですか?

多対多の関係を持つ次のエンティティオブジェクトグラフがあるとします。

User <- Group -> Value

そして私は次の不自然なルールを持っています:

rule "hasPurpleValue"
    $u : User()
    $g : Group() from $u.groups
    $v : Value(color == 'Purple') from $g.values
then
    //...
end

次のように、ユーザーをksessionに挿入できます。

//build user...
User user = new User();
Group group = new Group();
Value value = new Value("Purple");
group.setValue(value);
user.addGroup(group);

ksession.insert(user);

次に、それらを更新します。

ksession.update(ksession.getFactHandle(user), user);

しかし、Valueオブジェクトを直接に変更する"Orange"と、ユーザーをルートとして挿入されたため、ValueにはFactHandleがありません。ルールを定義し、エンティティを挿入して、エンティティを個別に変更でき、Droolsが結果を評価するようにするためのより良い方法はありますか?

4

1 に答える 1

1

あなたはあなた自身の選択をしなければなりません。投稿で述べたように、ファクトではないものを更新することはできません。insert()を挿入するすべてのオブジェクトはファクトですが、ネストされたオブジェクトには当てはまりません。ネストされたオブジェクトを処理する1つの方法は、今行ったことを実行することです。fromパターンを使用します。あなたが説明したように、このパターンの問題は、あなたが修正している実際のオブジェクトに関連するファクトオブジェクトを常にupdate()しなければならないということです。あなたがそれと一緒に暮らすことができるなら、それからそれのために行きなさい。これに対処する別の方法は、各オブジェクトをファクトとして挿入することです:ユーザー、グループ、および値。これにより、挿入コードが汚くなる可能性がありますが、柔軟性、可読性、そしてある意味でルールのパフォーマンスが向上します。したがって、ここには魔法のレシピはありません。シナリオにとってより便利なものを使用する必要があります。

それが役に立てば幸い、

于 2013-02-05T09:18:22.930 に答える