いつルールエンジンを使用してはいけませんか?[閉まっている]


108

ルールエンジンを使用する利点のかなりまともなリストと、それらを使用するいくつかの理由があります。必要なのは、ルールエンジンを使用しない理由のリストです。

私がこれまでに持っている最高のものはこれです:

ルールエンジンは、ワークフローやプロセスの実行を処理することを意図したものではなく、ルールを実行するように設計されたワークフローエンジンやプロセス管理ツールでもありません。

あなたがそれらを使用すべきでない他の大きな理由は何ですか?


回答:


34

非常に大きなルールセット(たとえば、1つのルールセットで数千のルール)を使用している人を見ると、とても緊張します。これは、ルールエンジンが企業の中心に位置するシングルトンであり、ルールをDRYに保つことで、それらを必要とする多くのアプリがルールエンジンにアクセスできるようになる場合によく発生します。私は、多くのルールを持つReteルールエンジンはよく理解されていると誰にでも知らせたいと思います。私は、競合が存在しないことを確認するためにチェックできるツールを知りません。

ルールセットを分割して小さく保つ方が良いオプションだと思います。アスペクトは、多くのオブジェクト間で共通のルールセットを共有する方法となります。

私は可能な限り、よりシンプルで、よりデータ駆動型のアプローチを好みます。


1
競合があるかどうかを判断することは、停止問題の変形であると思いませんか?
TMB 2013

それがあなたがそれを呼んでいるものであるかどうかわからない。その名前を使用すると何が変わりますか?何も見えない...
duffymo 2013年

@duffymo「よりデータ駆動型のアプローチ」の例はありますか?
jack.the.ripper 2015

確かに:ものを1つの意思決定表に入れて、必要な答えを得るためにクエリを実行します。Reteルールエンジンは必要ありません。
duffymo 2015

151

ルールエンジンの使用が悪いアイデアであった個人的な経験から2つの例を挙げます。

  1. 過去のプロジェクトで、ルールファイル(Droolsを使用したプロジェクト)にループ、関数などを含む多くのJavaコードが含まれていることに気付きました。これらは基本的に、ルールファイルを装ったJavaファイルでした。設計者に設計の理由を尋ねたところ、「ルールはビジネスユーザーが保守することは意図されていなかった」と言われました。

レッスン:理由から「ビジネスルール」と呼ばれていますが、ビジネスユーザーが簡単に保守/理解できるシステムを設計できない場合は、ルールを使用しないでください。

  1. 別のケース; 要件が十分に定義/理解されておらず、頻繁に変更されるため、プロジェクトはルールを使用しました。開発チームのソリューションは、ルールを広範囲に使用して、頻繁なコードの展開を回避することでした。

レッスン:要件は初期リリースの変更中に大幅に変更される傾向があり、ルールの使用を保証するものではありません。ビジネスが頻繁に変化する場合は(要件ではなく)ルールを使用します。例:-税法が変更され、ルールの使用法が優れたアイデアになると、税を実行するソフトウェアは毎年変更されます。Webアプリのリリース1.0は、ユーザーが新しい要件を特定すると頻繁に変更されますが、時間の経過とともに安定します。コードデプロイの代わりにルールを使用しないでください。


1
レッスン#2を言い換える良い方法は、「DSLに含まれる抽象化が変更される可能性が高いことがわかっている場合は、DSLを実装しないこと」だと思います。DSLの設計と実装は、リソースを大量に消費するプロセスであり、将来的に賞を獲得することを目指しています。サイクルごとにDSLを再作成する必要がある場合、安定化が発生するまで、ルールエンジンはまだうまく適合しません
このユーザーはヘルプが必要です

DSLは、解釈されたプログラミング言語が重いという点でリソースが重い可能性がありますが、他のコンパイル済み言語と同様に、静的に型付けして変更時にコンパイルすることもできます。
マシューホワイトド

19

私はビジネスルールエンジンの大ファンです。プログラマーとしての生活をはるかに楽にするのに役立ちます。データウェアハウスプロジェクトでの作業中に最初に経験したことの1つは、ページ全体に広がる複雑なCASE構造を含むストアドプロシージャを見つけることでした。このような長いCASE構造に適用されるロジックを理解し、コードのページ1のルールとページ5のルールとの間に重複があるかどうかを判断するのは非常に困難であったため、デバッグは悪夢でした。全体として、コードに埋め込まれた300以上のそのようなルール。

3000以上のルールを処理することを必要とするAccounting Destinationと呼ばれる新しい開発要件を受け取ったとき、何かを変更する必要があることを知っていました。その当時、私はプロトタイプの開発に取り組んできましたが、このプロトタイプは後に、現在すべてのSQL標準演算子を処理できるカスタムビジネスルールエンジンの親になります。最初はExcelをオーサリングツールとして使用しており、後でASP.netアプリケーションを作成しました。これにより、ビジネスユーザーがコードを記述せずに独自のビジネスルールを定義できるようになります。これで、システムは正常に動作し、バグはほとんどなく、このアカウンティング宛先を計算するための7000以上のルールが含まれています。このようなシナリオは、ハードコーディングだけでは実現できなかったと思います。

それでも、そのようなアプローチには限界があります。

  • 会社のビジネスをよく理解している有能なビジネスユーザーが必要です。
  • ビジネスルールエンジンで処理されるルールに変換するのに意味のあるすべてのハードコードされた条件を特定するために、システム全体(この場合はデータウェアハウス)の検索にかなりの負荷がかかります。また、これらの初期テンプレートがビジネスユーザーに完全に理解されるように、十分な注意を払う必要がありました。
  • ルールの作成に使用するアプリケーションが必要です。このアプリケーションでは、重複するビジネスルールを検出するためのアルゴリズムが実装されています。さもなければ、あなたは大きな混乱に終わり、だれも彼らが得た結果をもう理解しなくなります。カスタムビジネスルールエンジンなどの一般的なコンポーネントにバグがある場合、以前は機能していたものが今でも機能することを確認するためのデバッグと広範囲にわたるテストが非常に難しい場合があります。

このトピックの詳細は、私が書いた投稿にあります。http//dwhbp.com/post/2011/10/30/Implementing-a-Business-Rule-Engine.aspx

全体として、ビジネスルールエンジンを使用する最大の利点は、ユーザーが何かを変更する必要があるたびにIT部門に出向かなくても、ビジネスルールの定義とオーサリングを制御できることです。また、IT開発チームの作業負荷を軽減し、より付加価値の高いものの構築に集中できるようになりました。

乾杯、

ニコラエ


18

私が "両刃の剣"であることに気付いた1つのpoitは、次のとおりです。

論理を非技術スタッフの手に委ねる

非技術的な側面に1つまたは2つの学際的な天才がいるとき、この作品は素晴らしいと思いましたが、肥大化、より多くのバグ、そして一般的に4倍の開発/保守コストにつながる技術の欠如も見ました。

したがって、ユーザーベースを真剣に検討する必要があります。


13
それがプログラマーとしてのあなたのせいであり、彼があなたのシステムを使用できない場合、またはそれがBREであるかどうかにかかわらず、彼が常にそれで予測できない結果を達成する場合は、ユーザーの責任ではありません。ユーザーが自分のコードを使用できないことを非難することは、プロジェクトが持つ可能性のあるプログラミングの絶対に悪いタイプだと思います。
Kizz

それは非常に古い投稿ですが、私はこれ以上同意できません。可能であれば、技術者(またはベンダー)が実装/オンボーディングプロセス中にクライアントの構成を行い、その後、サービスリクエストベースで大きな変更を行うと思います。
Eric Xin Zhang

たぶん、誰かがMartin-FowlerがDSL-sについて書いた素晴らしい記事を読むと役立つでしょう:「DSLは、プログラマーが関与することなくビジネスパーソンがソフトウェアルールを書くことを可能にしますか?」martinfowler.com/bliki/BusinessReadableDSL.html
Robert Lujo

11

Alex Papadimoulisの記事はかなり洞察に満ちていると思いました:http ://thedailywtf.com/articles/soft_coding.aspx

それは包括的ではありませんが、彼はいくつかの良い点を持っています。


2
問題は、それが実際の標準ルールエンジンについて話していないことです。これは非常に悪いアイデアである自家製についてのみです。私はRETEアルゴリズムを実装して全体を提供する標準ルールエンジン(Blaze Advisor、ILog、Drools)について話しています。ルールを管理するエコシステム
BlackTigerX 2009年

素晴らしい記事です。標準のルールエンジンを使用すると、柔らかくなりすぎて、状況が複雑になる場合があります
Dean Hiller

1
1時間あたり100万トランザクションの銀行が30分間手数料計算ルールエンジンとの接続を失ったことを想像してください。開発者が開発を行っているため、これは修正のための多くの展開が行われる安定期間であり、1つのサービスを停止するだけでどれだけの損失が生じると想像してください。株式取引、外国為替、またはSWIFT転送?この記事は、プログラミング全般に関する最悪の記事の1つです

2
hragheb、30分のダウンタイムはどこから来たのですか?Facebookのような巨人は、ダウンタイムなしで常に新しいソフトウェアを展開しています。システム全体を停止する代わりに、バッチでノードの更新をサポートするようにアプリケーションを構築できます。
Lauri Harpf、2015

10

いつルールエンジンを使用しないかに関する素晴らしい記事...(そしていつ使用するか)....

http://www.jessrules.com/guidelines.shtml

別のオプションは、結果を得るために任意の順序で1回だけ適用される線形ルールセットがある場合は、Groovyインターフェースを作成し、開発者にこれらの新しいルールを作成してデプロイさせることです。利点は、通常、休止状態のセッションまたはjdbcセッションとパラメーターを渡して、すべてのアプリデータに効率的にアクセスできるため、非常に高速であることです。ファクトリストを使用すると、システムの速度を実際に低下させる可能性があるループ/マッチングが多数発生する可能性があります.....これは、ルールエンジンを回避して動的に展開できる別の方法です(そうです、私たちのグルーヴィーなルールはデータベースと私たちは再帰がありませんでした...それはルールを満たしたか、そうでなかったかのどちらかです)。これは単なる別のオプションです.....ああ、もう1つの利点は、新入社員向けのルール構文を学習しないことです。

それは本当にあなたのコンテキストに依存します。ルールエンジンはその場所にあり、ルールエンジンを必要としない非常に簡略化された状況で動的に展開することができるプロジェクトにルールがある場合、上記は単なる別のオプションです。

単純なルールセットがあり、代わりにGroovyインターフェースを使用できる場合は、基本的にルールエンジンを使用しないでください。動的にデプロイ可能で、チームに参加する新しい開発者がdrools言語よりも速く学ぶことができます(ただし、これは私の意見です)。


7

私の経験では、ルールエンジンは次の条件に当てはまる場合に最もよく機能します。

  1. あなたの問題領域のための明確に定義された教義
  2. ほとんどの入力の促進に役立つ高品質(できれば自動)データ
  3. 主題の専門家へのアクセス
  4. エキスパートシステムの作成経験を持つソフトウェア開発者

これらの4つの特性のいずれかが欠落している場合でも、ルールエンジンが機能する場合がありますが、1つでも欠落している状態で試してみるたびに、問題が発生しました。


this> _エキスパートシステムの作成経験を持つソフトウェア開発者_ <droolsドキュメントを注意深く読むと、Reteアルゴリズムをよく理解しているソフトウェア開発者がビジネスルールを実装する必要があることに気付くでしょう。ルールのパラメーター化へのアクセスは、スプレッドシートまたはCSVを介してビジネスユーザーに提供できます。それにもかかわらず、ルールはビジネスユーザーによって記述されますが、あなたが言うように、エキスパートシステムの専門知識を持つソフトウェア開発者によって実装されます。droolsのドキュメントはこれを説明しています。
Matt Friedman、

1

それは確かに良いスタートです。ルールエンジンのもう1つの点は、一部のことがよく理解され、確定的で、簡単なことです。給与の源泉徴収はそのようなものです(またはそうである必要があります)。あなたは可能性があり、ルールエンジンによって解決されるだろうルールとしてそれを表現していますが、値のかなり単純なテーブルと同じ規則を表現することができます。

したがって、ワークフローエンジンは、永続的なデータを持つ長期的なプロセスを表現する場合に適しています。ルールエンジンでも同様の処理を実行できますが、複雑さを増す必要があります。

ルールエンジンは、知識ベースが複雑で検索が必要な場合に適しています。ルールエンジンは複雑な問題を解決し、状況の変化にすばやく適応できますが、基本的な実装に多くの複雑さを課します。

多くの決定アルゴリズムは、実際のルールエンジンに含まれる複雑さなしに、単純なテーブル駆動型プログラムとして表現できるほど単純です。


0

Droolsのようなビジネスルールエンジンをオープンソースとして、または商用ルールエンジン( LiveRulesなど)を強くお勧めします。

  • 本質的に不安定なビジネスポリシーが多数ある場合、コアテクノロジコードのその部分を維持することは非常に困難です。
  • ルールエンジンは、フレームワークに優れた柔軟性を提供し、変更と展開が容易です。
  • ルールエンジンはどこでも使用されるわけではありませんが、定期的に変更が避けられない多くのポリシーがある場合に使用する必要があります。

0

私は以下のようないくつかのポイントを本当に理解していません

b)ビジネスマンに関する意見の相違は、ルールを知る必要はありません。

私にとって、BREに触れているだけの人として、BREの利点は、システムをビジネスの変化に適応させることと呼ばれているため、変化への適応に重点が置かれています。
時間xで設定されたルールが時間yで設定されたルールと異なる場合、次の理由で問題になりますか?
a)ビジネスの人々がビジネスを理解していない、または;
b)ビジネスマンはルールを理解していませんか?

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.