如何存储单一规则?

时间:2013-10-08 04:35:01

标签: c# .net rule-engine workflow-foundation-3

我的软件需要有某种规则库。无论如何我可以序列化一条规则吗?

为什么单一规则?因为在实际的规则引擎执行之前,我希望能够将一些特定规则添加到我的RuleSet中,并通过windows workflow rule engine执行该RuleSet。

根据这里给出的例子,我知道我可以序列化一个RuleSet吗?

以下是其完成情况的简要说明:

1。创建对折扣属性this.Discount

的引用
CodePropertyReferenceExpression discountProperty =  
    new CodePropertyReferenceExpression( 
    new CodeThisReferenceExpression(),  
    "Discount"); 

2。创建对orderValue属性的引用

CodePropertyReferenceExpression orderValueProperty = 
    new CodePropertyReferenceExpression( 
        new CodeThisReferenceExpression(),  
        "OrderValue"); 

3。在orderValue对象上定义条件

// if this.OrderValue > 500
RuleCondition discountCondition = new RuleExpressionCondition( 
    new CodeBinaryOperatorExpression( 
        orderValueProperty, 
        CodeBinaryOperatorType.GreaterThan, 
        new CodePrimitiveExpression(500))); 

4。定义规则操作

// Create an action that sets the property Discount to 5% 
RuleStatementAction setDiscountAction = new RuleStatementAction( 
    new CodeAssignStatement(discountProperty,  
        new CodePrimitiveExpression(5))); 

5。创建RuleSet

Rule discountRule = new Rule("CalculateDiscount"); 
discountRule.Condition = discountCondition; 
discountRule.ThenActions.Add(setDiscountAction); 
ruleSet = new RuleSet("DiscountRuleSet"); 
ruleSet.Rules.Add(discountRule); 

6。隔离规则集

RuleDefinitions ruleDefinitions = new RuleDefinitions(); 
ruleDefinitions.RuleSets.Add(ruleSet); 
WorkflowMarkupSerializer serializer = new WorkflowMarkupSerializer(); 
XmlTextWriter writer = new XmlTextWriter("MyRules.rules", System.Text.Encoding.Unicode); 
serializer.Serialize(writer, ruleDefinitions); 
writer.Close();

7。执行规则集

RuleEngine engine = new RuleEngine(ruleSet, typeof(Shopping));  
// execute the rule on a shopping object where OrderValue = 100 
// expect rule action to be not fired 
Shopping shoppingUnder500 = new Shopping(100); 
engine.Execute(shoppingUnder500); 
Console.WriteLine("shoppingUnder500 - Discount evaluated: " + shoppingUnder500.Discount); 

您可以在开头提到的链接中获得完整的示例。第6篇介绍了如何持久保存规则集。但是我想知道我们是否可以序列化一个规则,这只是一个编码条件表达式&一组陈述(动作)(再次由codedom表示)。

或者在某个地方存储单个规则的更好方法是什么?

0 个答案:

没有答案