簡體   English   中英

讀取存儲在 XML 文件中的業務規則的優雅方式

[英]Elegant way to read business rules stored in XML file

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

更新:
如果滿足規則的所有條件,則將規則按順序排列並執行一買一。

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>

XML 真的只是低級傳輸層,您使用的是在它之上的任何更高級別的格式嗎? 這樣您就可以獲得對特定庫的推薦。

編輯:

好的,投反對票,所以這不是您要尋找的答案。

您可能會獲得 oo 設計,但您需要發布 xml 的片段或詳細規范。

您打算如何將 model 這些規則放在 memory 中?

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

很難從如此簡短的描述中分辨出來,但我會將每條規則都設為 object,它管理自己的條件和操作。 這些規則將由 XML 的工廠創建並存儲在某種字典中。

我會考慮兩種設計,一種是一次性評估器(您的應用程序使用一組規則與數據運行一次,然后退出)在這種情況下,我將使用XML SAX解析器和處理數據的回調

另一個是一個 DOM 解析器,它使用一個規則 Class 緩存 memory 中的規則,該規則是條件(檢查)class402ABBBBBBB402A2F2ED4F8EBC2CBB4C21A29DC40AB61DZ402ABBBBBB21ED4F0AFZ 的組合。

規則部分看起來有點像 Schematron:

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

這是用 XML 和 ISO 標准編寫的 XML 驗證語言。

假設源數據(正在驗證)也在 XML 中,一種方法是將您的規則集轉換為 Schematron(這在 XSLT 中並不難),然后使用 Schematron“基礎結構”(即樣式表)來根據 Schematron 文件驗證您的內容。

這將產生一個結果 XML 文件,顯示哪些規則已滿足,哪些未滿足; 然后,您可以執行與每個已驗證規則相關的“操作”(轉換?)。

另請查看 RulesML ...

在 XML 中編寫業務規則很笨重。 此外,C++ 也不是 XML 處理的好語言。

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

If XML is required for defining rules, I would write the processor separately in a high level language such as Java, JavaScript or XSLT. 在后台運行處理器並獲取 C++ 應用程序中的返回值。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM