6

ユーザーが編集可能なある種のルール システムを実装する必要があることがよくあります。一般に、要件は十分に異なるため、同じシステムを直接適用することはできません。そのため、同じ問題に頻繁に遭遇します。ルール システムをどのように設計すればよいかということです。それ

  1. 維持可能です
  2. 表現力と使いやすさの適切なバランス
  3. 簡単に拡張できます((2)が間違っている場合)。

ルール システム/DSL は非常に価値があると思いますが、それらを適切に設計する能力に自信がありません。

これを簡単にするのに役立つ参考資料やヒントは何ですか?
私が遭遇する問題の性質上、既存の言語は通常適用できません。(たとえば、一般的なコンピューター ユーザーがメール フィルターを作成するために Python を学習する必要はありません。) 同様に、一部の (より単純な) ユーザー インターフェイスを構築する必要があるため、JESSなどのルール言語は部分的なソリューションにすぎません。 -ルール言語の最上位にあるため、プログラマー以外でも使用できます。このインターフェイスでは、必ず一部の機能を削除したり、それらの機能をより使いにくくしたりする必要があり、そのプロセスは上記と同じ問題を引き起こします。

編集:明確にするために、質問はルールエンジンの設計に関するものであり、事前に構築されたルールエンジンを探しているわけではありません。ルール エンジンを提案する場合は、それが適切な設計上の決定を下すことに関する質問にどのように対処するかを説明してください。

4

5 に答える 5

2

このツールのベンダーによる社内デモがありました: http://www.rulearts.com/rulexpress.php

会社として、私たちはルール エンジン (Cleverpath Aion など) について多くの経験を持っていますが、ほとんどが開発者向けのツールです。このツール (rulexpress) は非常にビジネス向けです。ルールエンジンではありません。ただし、すべてのデータを xml で出力できます (つまり、基本的に任意の形式)。これは、Windows Workflow Foundation などの実際のルール エンジンへの入力と見なすものです (より大きな/より優れたルール エンジンの 1 つではありませんが、まだ)。

ツール自体はかなり良さそうで、開発者向けのツールでは見たことのないものもいくつかありました。

WF を中心に構築されたルール管理用のツールもいくつかあります。選択したルール エンジンである場合は、InRule を確認してください。


元の質問が明確化された後に編集: 私はずっと前にこれに手を出しましたが (javacc で少し言語を書いています)、今ではこれは時間の無駄だと考えています。上記の私のコメントは同じ精神に基づいています。シンプルなルール エンジンと、ビジネス ユーザーが簡単に維持できるシンプルな (商用) UI を使用し、この 2 つを結び付けることに時間を費やすだけです。

于 2008-09-30T10:37:37.683 に答える
1

これで運が良かった: http://msdn.microsoft.com/en-us/library/bb472424.aspx

于 2008-09-15T22:04:55.883 に答える
0

考慮すべき Ruby 実装は Ruleby ( http://ruleby.org/wiki/Ruleby )です。

于 2008-09-15T22:05:20.390 に答える
0

私が発見したことの 1 つは、ルールを式ツリーとして定義できると、実装が非常に簡単になるということです。あなたが正しく述べたように、プロジェクトごとの要件は非常に異なるため、毎回再実装する必要があります。式ツリーとビジター パターンのようなものを組み合わせることで、簡単に拡張できる非常に (しゃれたものではない) 表現力豊かなフレームワークを作成できます。また、要件の側面を満たす非常に動的な GUI を式ツリーの上に簡単に配置できます。

ハンマーですべてが釘のように見えると言っているように聞こえないことを願っています...それはそうではないので...私の経験では、これは何度も役に立ちました:-)

于 2008-09-15T22:07:55.860 に答える
0

まず第一に、通常、エンドユーザーにルールを定義させることはお勧めできません。それは、彼らには開発のバックグラウンドがなく、無限ループに入る、または他の奇妙なことを行う「コード」を単純に書くことができるためです。

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

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

于 2008-09-30T10:01:25.227 に答える