2009-03-05 9 views
2

XMLファイル(私はVC++/MFC/MSXMLを使用しています)に格納されたビジネスルールを読み込む必要があります。 XMLはルールで構成されています。各ルールには一連の条件とアクションがあります。そのようなシステムのためのエレガントなOOPデザインは何でしょうか?このようなシステムの設計者がどこにいるのか、どのようなデザインパターンを使用しますか?XMLファイルに格納されたビジネスルールを読み込むエレガントな方法

更新:
ルールはすべての条件が満たされていれば、順番に並べられ、1つ買います。 XMLの

例:


    <rules> 
     <!-- rule no. 1 --> 
     <rule name="rule no. 1"> 
     <conditions> 
      <condition name="condition no. 1" type="ATTR_EMPTY"> 
       <parameters> 
        <parameter name="attribute_name">ttt</parameter> 
        <parameter name="workflow_id">3</parameter> 
        <parameter name="workflow_state_id">5</parameter> 
       </parameters> 
      </condition> 
      <condition name="condition no. 2" type="ATTR_EMPTY"> 
       <parameters> 
        <parameter name="attribute_name">ttt</parameter> 
        <parameter name="enviroment_id">3</parameter> 
       </parameters> 
      </condition> 
     </conditions> 
     <actions> 
      <action name="action no. 1" type="ATTR_CLEAR"> 
       <parameters> 
        <parameter name="attribute_name">ttt</parameter> 
       </parameters> 
      </action> 
     </actions> 
     </rule> 
    </rules> 
+0

うわー、あなたのXMLが問題なくルールエンジンに実際にロードされるかもしれないと思います。 –

答えて

1

このような簡単な説明からわかりにくいですが、私はそれぞれのルールを自分の条件や行動を管理するオブジェクトにします。ルールは、XMLからファクトリによって作成され、ある種の辞書に格納されます。

1

XMLは、実際には低レベルのトランスポート層では、使用して、その上に任意のより高いレベルのフォーマットですか?そうすれば、特定のライブラリへの推奨を得ることができます。

編集:

OK downvoteので、これはあなたが探していた答えではありませんでした。

おそらくあなたはooデザインを得ることができますが、xmlのスニペットや詳細な仕様を投稿する必要があります。

+0

投票が私からではなく、私はすべての意見で同じように面白いです... –

1

これらのルールをどのようにメモリにモデル化するつもりですか?

メモリ内でこれらのルールを表す1つの方法は、より高度なプログラミング言語(Pythonなど)を使用することです。実行時にC++オブジェクトを呼び出す同等の制御フローで、XMLルールをPythonコードに変換します。私は過去にルールシステムを実装しました。 JSのルールをXMLよりもはるかに簡単に定義することができ、さらにはより読みやすくなりました。また、実際に実行されたコードとしても使用されていました(SpiderMonkeyをC++ < - > JSに使用しました)。しかし、基本的にC++バインディングを持つ一般的なスクリプト言語で行うことができます。

1

2つの設計があります.1つはワンショットエバリュエーターです(アプリケーションはルールとデータの組み合わせで1回実行されてから終了します)。この場合、XML SAXパーサーを使用してコールバックを処理しますデータ

もう1つは、Condition(Check)クラスとActionクラスのコンビネーションであるルールクラスを使用してメモリにルールをキャッシュするDOMパーサーです。

1

規則の一部は、少しのSchematronのようになります。XMLとISO規格で記述されたXML検証言語である

http://www.schematron.com/elements.html

を。

ソースデータ(それが検証されている)がXMLでもあると仮定すると、一連のルールをSchematron(XSLTでは難しくないでしょう)に変換し、Schematronの "インフラストラクチャ" 、スタイルシート)を使用して、コンテンツをSchematronファイルに対して検証します。

これはどのルールが満たされているかを示している結果XMLファイルを生成します。検証された各ルールに関連付けられた「アクション」(変換?)​​を実行することができます。

0

ビジネスルールをXMLで記述するのは難しいです。また、C++もXML処理に適した言語ではありません。

アプリケーションは、Active Scriptingでプロパティを公開し、VBScript/JScriptでルールを書き込むことができます。このようにして、実行時にルールを評価することができます。

ルールを定義するためにXMLが必要な場合は、Java、JavaScript、XSLTなどの高水準言語でプロセッサを個別に記述します。バックグラウンドでプロセッサを実行し、C++アプリケーションの戻り値を取得します。

関連する問題