![](/img/trans.png)
[英]Is there an elegant way to read a binary file and copy its content to a vector<int>
[英]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.