1

製品ごとに異なるルールがある状況があります。

したがって、各製品ごとに 1 つの drl があります。

したがって、私が理解している限り、私には選択肢があります。

  1. これらすべてのナレッジ パッケージを 1 つの KnowledgeBase に追加します。

次に、Drools が製品の ID を使用して正しいルールに一致するようにします。

when 

avs : AvailabilityStatus( available == true, quantity <= 50, productId = 7899 ) 

then    

avs.setDiscountRate("0.65");

end 
  1. 製品ごとに新しい KnowledgeBase を作成します。つまり、50 個の製品の場合、それぞれに 1 つの drl がロードされた 50 個の KnowledgeBase を作成します。

私の Web アプリでは、リクエストごとに、製品のルールを新たに評価する必要があります。

どのアプローチがより効率的かはわかりません。

4

3 に答える 3

2

製品ごとにルールを作成する必要がある場合、パラメーターの変更のみを含む同じ種類の LHS を持つ複数のルールがある可能性があります。

when 
  avs : AvailabilityStatus( available == true, quantity <= 50, productId = 7899 ) 
then
  //update

次に、意思決定表の使用を検討できます。Drools はルール自体を生成できます。ユーザーガイドに記載されているように

于 2012-10-17T14:12:34.810 に答える
2

KnowledgeBase は、インスタンス化するのに非常にコストのかかるオブジェクトであるため、ルールを評価する必要があるたびに作成することはしません。

あなたが言及した最初のアプローチの方が優れていると思います(すべてのルールを1つのdrlにまとめる)。これにより、製品全体でルールを実行するオプションも開かれたままになります (価格ルールを追加したい場合、2 つ購入して 3 つ目を無料でモデル化したい場合を想像してください)。

3 つ目のアプローチでは、製品ごとに 1 つの drl を持つことができますが、それらすべてを同じナレッジ ベースにロードします。これは単一責任の原則に似ていますが、ルールに適用されます。

于 2012-10-15T08:03:28.900 に答える
0

ナレッジベースを1つだけ作成し、バイナリパッケージをファイルシステムに保存することをお勧めします。新しいルールを追加する場合は、バイナリパッケージを再生成します。ルールごとにdrlを作成しないでください。意味がありません。乾杯

于 2012-10-16T00:22:08.640 に答える