优雅的方式来读取存储在XML文件中的业务规则

时间:2009-03-05 11:44:29

标签: c++ xml design-patterns

我必须阅读存储在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>

7 个答案:

答案 0 :(得分:1)

XML实际上只是低级传输层,您使用的是任何更高级别的格式吗?这样您就可以获得特定库的建议。

编辑:

确定downvote所以这不是你想要的答案。

你可能会得到一个oo设计,但你需要发布一个xml的片段或详细的规范。

答案 1 :(得分:1)

您打算如何在内存中建模这些规则?

在内存中表示这些规则的一种方法是使用更高级的编程语言(例如python)。使用等效的控制流将XML规则转换为python代码,该控制在执行时调用C ++对象。我实际上已经在过去实现了规则系统。我使用JavaScript作为规则的序列化格式(在JS中比在XML中更容易定义规则,更易读)以及实际执行的代码(我使用SpiderMonkey来做C ++&lt; - &gt; JS )。但是你可以基本上用任何具有C ++绑定的流行脚本语言来完成它。

答案 2 :(得分:1)

很难从这样简短的描述中分辨出来,但我会将每个规则作为管理自身条件和行为的对象。规则将由工厂从XML创建并存储在某种字典中。

答案 3 :(得分:1)

我考虑了两种设计,一种是一次性评估器(你的应用程序运行一次,带有一组规则与数据然后退出),在这种情况下,我会使用带有回调的XML SAX解析器处理数据

另一个是DOM解析器,它使用规则类来缓存内存中的规则,规则类是Condition(Check)类和Action类的组合。

答案 4 :(得分:1)

规则部分看起来有点像Schematron:

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

这是一种用XML和ISO标准编写的XML验证语言。

假设源数据(正在验证)也是XML格式,一种方法是将您的规则集转换为Schematron(在XSLT中不难),然后使用Schematron“基础架构”(即,样式表)根据Schematron文件验证您的内容。

这将产生一个结果XML文件,显示哪个规则已经满足,哪个没有;然后,您可以执行与每个已验证规则关联的“操作”(转换?)。

答案 5 :(得分:1)

另请查看RulesML ...

答案 6 :(得分:0)

用XML编写业务规则很笨拙。此外,C ++也不是XML处理的好语言。

您的应用程序可以通过Active Scripting公开其属性,并在VBScript / JScript中编写规则。通过这种方式,您可以在运行时评估规则。

如果需要XML来定义规则,我会用高级语言(如Java,JavaScript或XSLT)单独编写处理器。在后台运行处理器并在C ++应用程序中获取返回值。