2008-09-15 9 views
6

多くの場合、ユーザーが編集できるルールシステムを実装する必要があります。要件は一般に同じで、同じシステムを直接適用することができないため、同じ問題が頻繁に発生します。ルールシステムの設計に関する参考資料/ヒント

  1. は、保守
  2. あるルールシステムが適切に使用
  3. のしやすさと表現力のバランスをとる(/場合、私は(2)間違ったを取得するときに)容易に拡張されます。

私はルールシステム/ DSLは非常に貴重だと思いますが、私はそれらを適切に設計することができないと思います。

これを簡単にするための参考資料やヒントを教えてください。
問題の性質上、既存の言語は一般に適用されません。 (例えば、でない場合は、一般的なコンピュータユーザーが電子メールフィルタを書くためにpythonを学ぶ必要があります)。の言語のようなJESSのような規則は、一部のルール言語の最上位に構築され、非プログラマがそれを利用できるようにします。このインタフェースは、必ずしも一部のフィーチャを削除したり、フィーチャを使用しにくくすること、およびprocessが上記の同じ問題を引き起こすことを必然的に伴います。

編集:は明確にするために、質問はルールエンジンをおよそ設計されて、私は事前に構築されたルールエンジンを探していませんよ。ルールエンジンを提案する場合は、優れた設計上の意思決定に関する質問にどのように対処するかを説明してください。

答えて

0

ことの一つは、式ツリーとしてルールを定義することができるということは実装をそんなになることです簡単です。あなたが正しく言及したように、プロジェクトごとの要件は非常に異なり、たまたま毎回再実装する必要があります。エクスプレッションツリーはビジターパターンのようなものと結合されているため、容易に拡張可能な表現可能なフレームワークを実現します。また、要件の側面に対応する表現木の上に、非常に動的なGUIを簡単に配置することができます。

これはそうではないので、私はすべてが私のハンマーで釘のように見えているようにうまくいけばいいと思います...それは私の経験上、これが一度だけ便利です:-)

+0

私は発現木の適用性を理解していません。ルール言語インタープリタの一部としてそれらを示唆しているのですか、それを使って各ルールのオプションを表現していますか?私は少し混乱しています。 – rcreswick

0

まず、通常、エンドユーザーにルールを定義させることはお勧めしません。なぜなら、彼らは開発の背景を持たず、無限ループに入ったり他の奇妙なことをする "コード"を書くことができるからです。

したがって、システムはその種の動作から保護しなければならず(したがって、より複雑にする)、そのような可能性を受け入れるか、またはエンドユーザーにこれを許可しないようにする必要があります。

.NETで作業している場合は、Booコンパイラを拡張することで、独自のDSLを簡単に作成することができます(Rhino.DSLでは1つのクラスで簡単なDSLを使用できます)。

2

私たちは、このツールの社内デモを持っていた、それはベンダーので:会社として http://www.rulearts.com/rulexpress.php

、我々はルールエンジン(例えばのCleverPathアイオン)が、ほとんど開発者向けのツールで多くの経験を持っています。このツール(rulexpress)は、非常にビジネスの方を対象としています。これはルールエンジンではありません。しかし、xmlのすべてのデータを出力することができます(基本的に好きな形式なので)。これは実際のルールエンジンの入力とみなされます。 Windows Workflow Foundation(より大きい/より良いルールエンジンの1つではありませんが、まだまだです)。

このツール自体はかなり見栄えが良く、開発者向けのツールでは見たことがないものもあります。

ルール管理のためのいくつかのツールがWFを中心に構築されています。ルールエンジンなら、InRuleをチェックしてください。 私は昔、この中に手を出しているが(JavaCCの中に少し言葉を書いて)、私は今、この悪い時間の投資を検討します:


は、元の質問を明らかにした後に編集します。上記の私のコメントは同じ考え方です:シンプルなルールエンジン、ビジネスユーザーが簡単にメンテナンスできるシンプルな(商用の)UIを取り、両者を結びつける時間を投資するだけです。

関連する問題