20

この問題を解決するための最善のアプローチについてアドバイスが必要です。

私はDROOLS、JavaRuleEngineなどを調査しました。これらはすべて強力であり、良い点があります。どちらが(もしあれば)私にとって最良の選択になるかわかりません。

1つのビジネスオブジェクトがあります。(デモ用に簡略化)

Person
     firstName:String
     lastName:String
     departMent:String
     hireDate:Date

これらのフィールドを中心に複雑なルールを作成できるようにするエディターをWebアプリケーションで作成する必要があります。複雑なネストされたAND/ORロジックをサポートする必要があります。基本的な演算子が必要なだけで、ルールは単純にtrueまたはfalseに評価されます。ルールがtrueまたはfalseと評価された場合、それぞれ1つのアクションが発生します。

例えば、

firstName CONTAINS "value" AND(lastName EQUALS "input" OR department CONTAINS "input")

自分でパーサーを書いて、自分のコードでロジックを評価するだけでいいのではないかと思っていました。どうしたらいいかわからないので、何かアドバイスや読み物へのリンクをいただければ幸いです。調査できる特定のデザインパターンはありますか?

この問題をどのように解決しますか?ルールエンジンに関する1つの懸念は、単純な問題には複雑すぎるのではないかということです。

4

7 に答える 7

5

これははい/いいえの質問ではありませんが、おそらく私の経験を共有でき、役に立てば幸いです. 私はいくつかのプロジェクトで DROOLS をうまく使ってきました。一部のケース (別のチームが高負荷下で DROOLS に問題を抱えていた) を除けば、DROOLS は非常に便利なライブラリです。


1. ソースから入力を読み取る
2. 一連の利用可能な操作からの入力に基づいて次のアクションを選択するアプリケーションを構築しました。

一見些細なことですが、非常に柔軟である必要がありまし
た。
2. 値、特定の名前/値の存在/不在 (イベントの発生/不在に基づく) は、さまざまなアクションをトリガーします。
3. ビジネス ルールは、アプリケーションの実行中に変更される可能性があります。

もっと良い解決策があるかもしれませんが、良くも悪くも最終的に DROOLS を使用することになりました。DROOLS コンポーネントによって決定が行われる BPEL を開発しました。DROOLS コンポーネントは、Microsoft Excel スプレッドシートから意思決定ルールを内部的に読み取ります。ファイルに変更がある場合、ルールを再構築します。現在、ドメインの専門家は必要に応じてこのスプレッドシートを変更しており、面倒な展開は必要ありません!

洗練された UI が必要な場合、DROOLS Guvnor はすぐに利用できる (豊富な UI を備えた) Web アプリケーションであり、ドメイン/主題の専門家がルールを構築してデータベースに保存するのに役立ちます。

于 2010-12-03T18:37:57.157 に答える
1

Drools のドキュメントでは、ルール エンジンをいつ使用するかについて説明しています。 http://downloads.jboss.com/drools/docs/5.1.1.34858.FINAL/drools-expert/html_single/index.html#d0e181

ドキュメントから...

これに対する最短の答えは、「問題を解決するための満足のいく従来のプログラミング アプローチがない場合」です。その短い答えを考えると、もう少し説明が必要です。「従来の」アプローチがない理由は、おそらく次のいずれかです。

-- この問題は、従来のコードにはあまりにも厄介です。

問題は複雑ではないかもしれませんが、それに対する解決策を構築するための壊れにくい方法が見つかりません。

-- この問題は、明らかなアルゴリズムによる解決策を超えています。

解決するのが複雑な問題であり、明確な従来の解決策がないか、基本的に問題が完全に理解されていません。

-- ロジックは頻繁に変更されます

ロジック自体は単純かもしれませんが、ルールは頻繁に変更されます。多くの組織では、ソフトウェアのリリースはほとんどなく、プラグ可能なルールは、必要かつ期待される「機敏性」を合理的に安全な方法で提供するのに役立ちます。

-- ドメインの専門家 (またはビジネス アナリスト) はすぐに利用できますが、技術者ではありません。

ドメインの専門家は、多くの場合、ビジネス ルールとプロセスに関する豊富な知識を持っています。それらは通常、非技術的ですが、非常に論理的です。ルールを使用すると、ロジックを独自の用語で表現できます。もちろん、彼らはまだ批判的に考え、論理的思考ができる必要があります. 非技術職の多くの人々は正式なロジックのトレーニングを受けていないため、ビジネス知識をルールに体系化することで、ビジネス ルールとプロセスが現在理解されている方法に穴が開いていることが多いため、注意して彼らと協力してください。

使わない時は…

ルール エンジンは動的 (ルールをデータとして保存、管理、更新できるという意味で動的) であるため、ソフトウェアの展開に関する問題の解決策と見なされることがよくあります。(ほとんどの IT 部門は、ソフトウェアの展開を防ぐ目的で存在しているようです。) これがルール エンジンを使用する理由である場合は、宣言型ルールを記述できるときにルール エンジンが最適に機能することに注意してください。別の方法として、データ駆動型の設計 (ルックアップ テーブル)、またはスクリプトがデータベースで管理され、その場で更新できるスクリプト処理エンジンを検討できます。

于 2010-12-01T23:16:41.447 に答える
0

いくつかのサンプル ルール エンジン インターフェースを見て、どれが気に入ったかを確認します。Web ベースの電子メール ルール インターフェイスを見て、アイデアを得ることができます。単純なルール エンジンが本当に必要な場合は、適切なインターフェイスを作成するだけで、JavaScript を使用してサーバーにルールを送信できます。

于 2010-12-01T22:54:00.890 に答える
0

Jython は役に立ちませんか?

各式/複合ルールは、関数の本体である可能性があります。したがって、ユーザーが本体を提供し、コードが関数仕様をその周りに置き、それを実行します。

また、独自の Java オブジェクト / 変数を jthon コンテキストに入れて、スクリプト / 関数本体で使用することもできます。

次に、標準化され、拡張可能で、広く使用されている言語をすぐに利用できます。しかし、Jython エディターは課題になる可能性があると思います。

于 2010-12-02T08:35:41.157 に答える
0

独自のパーサーをお勧めします。このコンテキストでは、オブジェクトをシリアル化し、AJAX を使用してバックエンドで検証できないのはなぜですか? 次に、検証ロジックを UI から分離します。

于 2010-12-01T22:51:40.590 に答える
0

おそらくそうではありません。適切なドメイン モデルが必要です。オブジェクトが単なるデータ プレースホルダーではありません。あなたのユーザーは、このような複雑なルール システムを理解して使用できる可能性が高く、カプセル化とリファクタリングが適切にサポートされている Java でのプログラミングだけを好むユーザーではないでしょうか? ルール システムは、制限されたドメインの単純なルールでのみ機能します。このドメインでは、プログラマーとしてのトレーニングを受けていない人にルールの構築方法を説明できます。また、ルールの構築は単なるプログラミングであることを忘れないでください。そのため、バージョン管理とテストが必要であり、グローバルは必要ありません。

于 2010-12-01T23:16:41.340 に答える
-3

JBehaveを試しましたか?

JBehave は、動作駆動型開発 (BDD) のフレームワークです。BDD は、テスト駆動開発 (TDD) と受け入れテスト駆動設計の進化形であり、これらのプラクティスを新規参入者と専門家の両方にとってよりアクセスしやすく、直感的にすることを目的としています。語彙をテストベースから行動ベースにシフトし、それ自体を設計哲学として位置づけています。

于 2010-12-01T23:46:47.340 に答える