WF从入门到精通(第十二章):策略和规则

1.知道在工作流处理过程中怎样进行策略和规则的处理

2.理解前向链接以及这是如何影响到基于规则的工作流处理过程的

3.为工作流处理过程创建规则

4.结合Policy活动来使用规则

我敢肯定,我们中的大多数人编写面向过程的代码(imperative code)都很轻松自在。过程式代码指通过编程来实现业务处理过程的C#代码,例如,读取一个数据库表,增加这个表中某些列的值,然后把它们统统都写到另一个数据库的表中。

但在本章,我们将深入规则,规则是对工作流的执行进行控制的一种机制,但它被看作是声明性的(declarative)。通常,声明性代码并不会被编译进程序集中,而是在应用程序执行时被解释。ASP.NET 2.0中有许多新的特征就是声明性的,这其中包括数据绑定和改进了的模板控件。它们能够让你在写ASP.NET应用程序时不使用C#代码就可去执行数据绑定或者其它复杂的控件呈现任务。

Windows Workflow Foundation(WF)也具有声明性的能力,但它是对规则和策略进行绑定而不是数据。你不能使用HTML或者ASP.NET的构造来声明你的规则,当然,涉及的概念都是相似的。

但是什么是规则,什么又是策略呢?

策略和规则

当我写一个涉及到数据或业务过程的程序时,我都会对数据或业务过程进行理解并把它转换成计算机去执行的代码。例如,考虑这样一个对帐目进行检查的处理逻辑:“假如在AvailableBalance列中的值少于要求的值,将抛出一个OverdraftException异常。”这似乎很简单...下面是表达这个行为的一些伪代码:

IF (requestedValue > AvailableBalance) THEN
    throw new OverdraftException("Insufficient funds.")

但是要是银行客户具有透支保障功能,假如主账户资金不足时能对次账户进行存取又会怎么样呢?要是客户没有透支保障功能但是可自动设置透支范围的信贷业务又会怎么样呢?要是客户两样都有呢……我们该使用哪一个呢?  

就像你能预见到的,为了对各种情况都进行检查,代码就会变得既复杂又混乱。更糟糕的是,它不能很方便地移植到其它业务处理过程中,并且它维护起来可能也很困难。

更进一步,我们看到了这些不只是去进行数据处理而且还有数据之间的关系。在代码中,我们运用过程化的处理方式来对关系进行处理,这些通常都会被翻译成许多嵌套的if语句,swith语句和循环。假如以前你在处理过程中使用了大量的if语句去对所有可能的条件检查,你或许应该问问自己是否已经没有更好的方式了。

至少在WF中有更好的方式。我们可以创建声明性规则然后使用规则引擎(rules engine)来处理它们。声明性规则对关系进行描述说明,它也适合应用到潜在要进行判断的地方。

WF承载了一个规则引擎(rules engine)。该规则引擎可使用XML格式编码的规则,并且能把这些规则应用到你的工作流的方法和字段中。在WF中,你能把面向过程的代码和声明性规则两者结合在一起形成一个总的解决办法。

WF中主要有两个地方会用到规则处理:条件处理和策略。你将发现条件处理是IfElse、While、Replicator以及ConditionedActivityGroup这些活动的一部分。假如你回顾一下第9章“逻辑流活动”和第11章“并行活动”的话,在那些地方介绍和示范的活动中,在每种情况下我都使用一个代码条件来对处理流程进行判断。当然,代码条件的实现是你工作流处理类中的一个事件处理程序(它通过WF所提供的一个CodeCondition类被绑定)。但是,在本章中你将开始使用规则条件进行替换。直到目前在本书中还没有体验过策略的使用,但在本章中当我介绍Policy活动时将对策略进行演示。

备注:对于WF和基于规则的处理可以写完整地一本甚至是一部系列丛书。我不可能在本章覆盖到各个方方面面。但可以做到的是对几个关键的概念进行介绍,这些概念对于你来说是全新的,并且也为你提供了一些基于WF的应用程序,它们用来对基于规则的处理过程的某个特定方面进行演示。假如你对这些话题感兴趣,我强烈建议你花些宝贵时间到Google上(http://www.google.com/),大量的网站都有关于在基于工作流的系统中实现业务处理流程方面的论文和资料。

在WF中,规则(rule)通过条件来表示,它返回一个Boolean值,并伴随着一个或多个操作。WF中规则风格的布局遵循if-then-else风格。规则引擎对条件进行判断,然后指挥工作流按照条件处理的结果去执行。在一定程度上,规则类似于脚本代码,与规则引擎一起充当脚本执行环境。在面向过程的代码之上使用规则的优点是规则能很容易地进行修改,以让你部分的业务处理过程更容易地适应易变的环境。

在WF术语中的策略是指规则的集合,它被包含到一个规则集(RuleSet)中。这使有些被称作前向链接(forward chaining)的事情变得更方便,这个假想的术语指的是在当前处理规则发生改变导致状态变化后,能对规则重新进行判定。

时间: 2024-08-31 12:51:12

WF从入门到精通(第十二章):策略和规则的相关文章

WF从入门到精通(第六章):加载和卸载实例

学习完本章,你将掌握: 1.理解工作流实例为什么要卸载和重新加载及其时机 2.理解工作流实例为什么要持久化及其时机 3.搭建SQL Server 2005,使其为WF和工作流持久化提供支持 4.使用SqlWorkflowPersistenceService服务 5.在你的工作流代码中进行实例的加载和卸载 6.使持久化服务能自动地加载工作流实例及卸载空闲中的工作流实例 假如你花点时间真正考虑该怎样使用WF和工作流在你的应用程序中进行处理的话,你或许想像的许多解决方案中都包含那些需长时间运行的处理过

WF从入门到精通(第十三章):打造自定义活动(二)

FtpGetFileActivity类 using System; using System.Collections.Generic; using System.Text; using System.IO; using System.Net; using System.ComponentModel; using System.ComponentModel.Design; using System.Workflow.ComponentModel; using System.Workflow.Com

WF从入门到精通(第三章):workflow实例

学习完本章,你将掌握: 1.使用不带参数和带参数二种方式初始化一个workflow实例 2.测定你运行中的workflow实例的状况 3.停止workflow实例 4.确定你的workflow空闲或终止的原因 一个workflow实例由一个或多个活动组成.(我们将在第七章开始介绍各种活动:"Basic Activity Operations.")"primary activity"或者"root activity"被称作"workflo

WF从入门到精通(第十七章):关联及本地主机通信(上)

学习完本章,你将掌握: 1.了解工作流关联(correlation)以及在什么地方必须去使用它.它为什么是重要的 2.使用工作流关联参数(correlation parameters) 3.生成并使用相关的本地通信服务 贯穿本书你看过的应用程序普遍都是基于单一相同架构的,通过WF的支持在工作流实例中执行任务.这些都是在应用程序和它的工作流实例间进行一对一的通信.假如你和一个工作流实例进行通信,你这样做保证了无论以任何方式在应用程序和工作流之间传送数据都不会被混淆.一个应用程序对应一个工作流. 但

WF从入门到精通(第十三章):打造自定义活动(一)

学习完本章,你将掌握: 1.了解对于创建一个功能齐全的自定义工作流活动来说哪些组件是必须的 2.创建基本的自定义工作流活动 3.在基本的自定义工作流活动中应用验证规则 4.把基本的自定义工作流活动集成到Microsoft Visual Studio的工作流视图设计器和工具箱中 WF并不可能涵盖到你可能在你的工作流中想要实现的各个方方面面.即使WF对于开发社区来说仍是非常新的技术,但目前已经可以获得许多免费发布的自定义活动,可以肯定商业级的活动最终也会跟进. 在这章中,你将通过创建一个新的工作流活

WF从入门到精通(第十一章):并行活动

学习完本章,你将掌握: 1.理解在工作流环境中Parallel活动是怎样执行的,并且懂得如何使用它们 2.并行执行路径中的同步数据存取和临界代码区 3.使用ConditionedActivityGroup活动去执行根据条件表达式判断执行路径的并行活动 在本书中截止目前为止,我们仅仅处理过顺序业务流程.如活动A执行后转到活动B的执行等等.我们还没看到过并行执行路径和由此通常伴随而来的错综复杂的情况.在本章中,我们将看看并行活动的处理过程,以及看看怎样对横跨并行执行路径的共享信息进行同步存取. 使用

WF从入门到精通(第五章):workflow跟踪

学习完本章,你将掌握: 1.workflow的可选服务 2.创建一个事件跟踪数据库 3.激活事件跟踪服务 4.创建一个自定义跟踪 5.查看你的workflow的跟踪信息 目前为止,我们看过workflow的一些基本对象.我们通过活动创建workflow任务,它们在执行时由WorkflowInstance对象进行管理.workflow实例由WorkflowRuntime编入队列并进行控制.但WF不只是为我们提供了这些对象,它也为我们提供了一些服务来和这些对象一起协同工作. 可插拔(可选)服务 工作

WF从入门到精通(第四章):活动及workflow类型介绍

学习完本章,你将掌握: 1.workflow活动是怎样形成的 2.顺序工作流和状态机工作流之间的区别 3.创建一个顺序工作流 4.创建一个状态机工作流 活动是WF中workflow处理的基本单位,假如你再把一个业务处理过程(或workflow任务)进行分解,你会发现它由更小.更细的任务组成.假如需设计这样一个大的任务,它需把信息送到一系列的数据处理系统进行处理,那么子任务或许就包括这样一些事情:从数据库读取数据,使用这些数据生成一个文件,通过使用FTP或XML Web service把文件传到一

WF从入门到精通(第七章):基本活动的操作

学习完本章,你将掌握: 1.知道怎样使用Sequence活动 2.知道怎样使用Code活动 3.知道在工作流中怎样抛出异常并对其进行处理 4.知道如何在代码中暂停和终止你的工作流实例 在本章,我们将正式引入前面已经看到过的一组活动:Sequence活动和Code活动.但我相信,适当的错误处理对于精心设计和运行良好的软件是至关重要的,所以我们将会研究如何使用工作流中的活动抛出异常.捕获异常.甚至暂停和终止你的工作流.我们就从Sequence活动开始吧. 使用顺序活动对象 实际上,说我们已见过Seq

WF从入门到精通

WF从入门到精通(第十九章):把工作流发布为Web服务 WF从入门到精通(第十八章):在你的工作流中调用Web服务 WF从入门到精通(第十七章):关联及本地主机通信(下) WF从入门到精通(第十七章):关联及本地主机通信(上) WF从入门到精通(第十六章):声明式工作流 WF从入门到精通(第十五章):工作流和事务 WF从入门到精通(第十四章):基于状态的工作流 WF从入门到精通(第十二章):策略和规则 WF从入门到精通(第十三章):打造自定义活动(二) WF从入门到精通(第十三章):打造自定义活