2

ルールエンジンを使用して、「動的ロジック」が Drools ルールとして実装されているシステムがあります。

クライアントの実装ごとに、その特定の実装用の drl ファイルを使用して、カスタムの価格設定および税計算ロジックが実装されます。

rule 'abc'
when
    name = 'X'
then
    price= '12'
end

また、1 つのルールの条件は、前のルールの設定内容に依存するため、基本的にルールの遷移があります。

drools ルールはシーケンシャル プログラミングではなく、開発者に優しくないため、これは非常に苦痛です。drools の評価方法の誤解により、多くのバグが発生します。

簡単に置き換えることができる、より優れた「java/groovy」の代替手段はありますか?

4

1 に答える 1

2

答えは、最終的な解決策を最終的にどうしたいかによって異なると思います。ビジネス ルールをルール エンジンから取り出して Java/Groovy に入れたい場合は、あるルール エンジンから取り出して別のルール エンジンに入れたい場合とは大きく異なります。

あなたの質問は事前に傾いているようですので、私はそれに対処します。このアプローチには十分注意してください。これを実装した以前の個人は、Rete アルゴリズムの使用に関して適切な方法でこれを行ったようです。1 つのルールを起動すると他のルールを実行できるように思えます。これは優れたビジネス ルールです。これらは連続的ではなく、宣言的です。 . 命令型ソフトウェアは主にエンジニア向けに書かれており、100% の確率で現実世界にマップされるわけではないことを覚えておいてください :)

これを Java/Groovy に移行したい場合は、命令型言語に移行することになり、if/then/else 地獄に陥る可能性があります。次のことをお勧めします。

  1. このコードをコードベースの残りの部分から分離します。将来、ビジネスでルールが変更されたときに、このコードに対して多くのメンテナンスを行うことになります。ここでの優れたインターフェース設計とカプセル化は、将来的に大きな利益をもたらします。
  2. ビジネス顧客と一緒にある種の DSL を作成して、顧客が「クレジット ポリシー」などと言うときに、彼らが何を指しているのかを正確に把握し、関連するルールを適切に変更できるようにします。
  3. 単体テスト、単体テスト、単体テスト。これは、現在の構成にも当てはまります。今バグを見つけているのなら、なぜあなたのテストはそうでないのですか? junit をセットアップしてオブジェクトを作成し、Drools エンジンを呼び出して応答をテストするのに、それほど時間はかかりません。同じ応答を期待する変数の範囲をテストするためにいくつかのループを追加すると、すぐに何十万ものテストに参加できます。

余談ですが、このルートをたどりたくない場合は、エンジンと Rete を理解できるように Drools のトレーニングを受けることを強くお勧めします。顧客のルールを実装可能なソ​​フトウェアにすばやく変換できれば、顧客に大きな利益をもたらすことができます。

于 2013-02-28T13:12:53.777 に答える