2009-03-05 127 views
2

我必須閱讀存儲在XML文件(我使用VC++/MFC/MSXML)中的業務規則。 XML由規則組成。每個規則都有一組條件和操作。這種系統的優雅OOP設計是什麼?如果你在這種系統的設計者身上,你會使用什麼樣的設計模式?讀取存儲在XML文件中的業務規則的優雅方式

更新:
如果滿足規則的所有條件,則按順序執行規則並執行一次買入。 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可能實際上加載在我的規則引擎中沒有問題。 – 2010-01-22 16:17:15

回答

1

很難從這樣簡單的描述中看出來,但我會讓每個規則成爲管理自己的條件和行爲的對象。規則將由工廠從XML創建並存儲在某種字典中。

1

XML是真的只是低級別的傳輸層,是你用在它上面的任何更高級別的格式?這樣你可以得到對特定庫的建議。

編輯:

OK了downvote所以這是不是你要找的答案。

你可能會得到一個oo設計,但你需要發佈一個xml的片段或一個詳細的規範。

+0

投票不是來自我,我在所有的意見同樣有趣... – 2009-03-05 12:08:29

1

你打算如何在內存中建模這些規則?

在內存中表示這些規則的一種方法是使用更高級別的編程語言(例如python)。將您的XML規則轉換爲Python代碼,並使用等效的控制流程在執行時調用C++對象。過去我實際上已經這樣做來實施規則系統。我使用JavaScript作爲規則的序列化格式(在JS中定義規則比在XML中更容易定義,並且更易於讀取)以及實際執行的代碼(我使用SpiderMonkey執行C++ < - > JS)。但是你可以基本上用C++綁定的任何流行的腳本語言來完成它。

1

我會考慮兩種設計,一種是單擊評估程序(您的應用程序只運行一次規則與數據然後退出),在這種情況下,我會使用帶回調函數的XML SAX解析器來處理數據

另一種是DOM解析器,它使用Rule(Check)類和Action類的組合規則類在內存中緩存規則。

1

規則的一部分看起來像Schematron的一點:

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

這是寫在XML和ISO標準的XML驗證語言。

假設源數據(即正在驗證的)也使用XML,一種方法是將您的規則集合轉換爲Schematron(在XSLT中不會很難),然後使用Schematron「infrastructure」(即,樣式表)根據Schematron文件驗證您的內容。

這將產生一個結果XML文件,顯示哪個規則已被滿足,哪個沒有;您可以執行與每個已驗證規則相關的「操作」(轉換?)。

0

用XML編寫業務規則很笨拙。另外,C++也不是一個好的XML處理語言。

您的應用程序可以通過活動腳本公開其屬性,並在VBScript/JScript中編寫規則。通過這種方式,您可以在運行時評估規則。

如果定義規則需要XML,我會用高級語言(如Java,JavaScript或XSLT)分別編寫處理器。在後臺運行處理器並獲取C++應用程序中的返回值。

相關問題