wf学习笔记(三)——规则与规则集

wf学习笔记(三)——规则与规则集

ID:17662704

大小:238.00 KB

页数:11页

时间:2018-09-04

wf学习笔记(三)——规则与规则集_第1页
wf学习笔记(三)——规则与规则集_第2页
wf学习笔记(三)——规则与规则集_第3页
wf学习笔记(三)——规则与规则集_第4页
wf学习笔记(三)——规则与规则集_第5页
资源描述:

《wf学习笔记(三)——规则与规则集》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、目录一概述二常用类型三定义规则条件四定义规则集一概述  规则是一条关于数据的声明性语句。在规则中声明了希望在运行时计算的条件,根据结果执行不同的操作。  规则由3部分组成:·条件Boolean类型表达式。·Then操作条件为true时的操作。·Else操作条件为false时的操作。  要在程序中使用规则引擎,首先要将业务逻辑需求组织为单独的规则(Rule),然后再将规则组织到规则集(RuleSet)中。规则与规则集都是程序代码。定义的规则是由规则引擎来执行的。规则的实际执行和计算是基于数据的,并且

2、能和其他规则进行交互。规则集在执行时会计算每个规则,并执行合适的操作。默认情况下,规则会根据规则名称的字母顺序来执行,但可以显式指定。默认不会显式指定计算顺序,因为工作流规则引擎支持“正向链接”,它通过发现并监视规则之间的依赖关系项来工作。如果规则修改的变量会影响之前计算过的规则在其条件中引用的话,正向连接就会使之前的规则再次进行计算。(可以显式地控制规则依赖项,也可以完全关闭正向链接。)  当规则条件或操作引用了一个字段或属性时,规则引擎能够自动地标识依赖项,并控制正向链接。但是,当条件或操作执

3、行方法时,规则引擎就无法自己来确定依赖项了,此时需要我们显式地指定依赖项(使用特性)。  在工作流中添加了规则之后,它们就会被序列化到单独的.rules文件,并生成为项目的嵌入式资源。rules资源就会在执行期间进行反序列化。http://touxiang.qqq90.com也可以讲该文件保存到项目外部,然后在代码中显式地进行反序列化操作。这种分离提供了在不修改应用程序代码的前提下,更新业务逻辑规则的方法。  基于规则的应用程序具有以下优势:·规则将业务规则和程序代码清晰地分离。·规则是声明业务需

4、求和数据间关系的一种极为简单的方式。·规则能够更加轻松地将业务需求翻译成能够运转的应用程序。·基于规则的应用程序为真实的业务规则提供了更大的可视性。·基于规则的应用程序具有更强的扩展性和适应性。二常用类型  RuleSet、Rule、RuleAction的关系如下图所示:  每个RuleSet包含多个Rule,而每个Rule又包含多个RuleAction的派生类实例。  Rule类用来声明单个业务规则。该类是单个规则条件以及至多两个规则操作的容器。其中一个操作会在条件计算为true时执行,另一个操

5、作(如果定义)则会在条件为false时执行。  Role类的ThenAction和ElseAction属性都是IList类型的,RuleAction是抽象类,在构造实例时其常用的派生类型如下:三定义规则条件(一)声明性规则条件(DeclarativeRuleCondition)   打开规则编辑器:  定投规则条件:(二)代码条件(CodeCondition)  通过对ConditionalEventArgs事件参数的Result进行赋值来返回结果,其代码形如:privat

6、evoidIsTwo(objectsender,ConditionalEventArgse){e.Result=this.Number==2;}  使用代码条件时,如果涉及到某个活动,则需要考虑活动执行上下文。工作流中的代码可以访问代表了子活动的变量,http://tx.qqlove789.com但是需要以上下文安全的方式访问该活动。在定义代码条件中要使用标准的语法来获取当前活动,而非模板。该实例在以后的文章中再做探讨,本篇博文实例并不适合演示该语法。四定义规则集(一)规矩集的简单设置  打开规则

7、集编辑器:  定义规则集:(二)正向链接与ChainingBehavior  当规则条件或操作引用了一个字段或属性时,规则引擎就能轻松地标识依赖项,并使用它来控制正向链接。如果某个操作修改了字段或属性,它就会标识其他在条件中引用同一个字段或属性的规则。  VS默认不会指定规则执行顺序,我个人的习惯是不管是使用何种ChainingBehavior类型,我都会显式指定规则执行顺序,原因是这样可以增加代码的可读性。如果不指定执行顺序,那么,在构造操作表达式时就应该考虑到操作执行的顺序的无关性情况,而不应

8、该构造出会由执行顺序造成结果变动的表达式。例如:规则名称条件ThenElse优先级描述Discountthis.Count>10this.Total=this.Price*this.Count*0.95+15this.Total=this.Price*this.Count+152多余10件打95折Vipthis.IsVipthis.Total=this.Total* 00.9会员打9折Freightthis.Total-15>=50this.Total=this.Total-15 

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。