代码改变世界

WF 4.0的建模风格:顺序和Flowchart

2009-06-16 08:56 by Windie Chai, ... 阅读, ... 评论, 收藏, 编辑

WF 4.0提供了许多活动,其中有一些是流控制活动,用来表达不同的建模风格,开发人员可以使用这些风格来构建各自的业务过程。顺序Flowchart是WF4中提供的两个建模风格。本文将会介绍这两种建模风格,了解它们的概念、使用场景、以及它们之间的主要区别。

 

顺序建模风格

顺序工作流会按顺序执行它包含的一组活动。WF 4.0的Sequence 活动允许你以顺序建模风格来构建工作流。Sequence 包含了一个活动集合,添加到该集合中的活动会被按照顺序计划执行。因此,活动的执行顺序是可预知的。

你可以在Sequence 活动中添加任何活动-诸如ForEachIfSwitchWhileDoWhile等程序性流控制活动,或者诸如ParallelParallelForEach 等并行结构来构建逻辑的并行执行;再或者WF 4.0 中提供任何活动(概览1概览2)(也可以是自定义活动或第三方活动)。

下图显示了一个休假审批工作流是如何使用Sequence 互动和其他活动来构建成一个顺序工作流的。在该工作流中,我们首先检查员工是否还有足够的假期可休,然后等待领导审批,最后更新他在公司人力资源数据库中的休假信息。用橙色方框突出显示的活动(Get Manager Approval)实际上是一个While 活动(在主Sequence中呈收缩状态),它会在变量approvedByManager的值为False时执行另一个包含子活动的 SequenceAskForApproval)。

使用顺序建模风格来构建的工作流非常易于理解和创作。它们可以用来模拟简单到难度适中的过程。由于程序性活动相当于编程语言中的程序性语句,你就可以使用这种类型的工作流来模拟几乎所有类型的过程。顺序工作流还很适合模拟简单的并且没有人类交互的过程(比如服务)。

随着过程复杂度的增加,工作流也会变得越来越复杂。与代码相比较,工作流能够使你具体地看到过程,并且可视化地进行调试,然而,你也许还希望将逻辑提取为可以重用的自定义活动来改进大型工作流的可读性。

顺序建模风格和Sequence活动

在使用顺序建模风格来创建工作流时,Sequence 并不是必要元素。本文下面将会解释,WF 4.0的所有活动都可以作为工作流的根活动。因地,我们可以创建不包含Sequence ,却仍然使用顺序建模风格和程序性活动的工作流。在下图中,我们的工作流使用了ForEach 作为根活动,它将列表中的所有长度大于5的子项打印出来。

sequential-workflow-using-foreach-as-root-activity

Flowchart建模风格

Flowchart是一种众所周知的、能够直观地表示业务过程的图表。业务分析师、架构师和开发人员经常使用Flowchart作为他们表达过程定义和逻辑流的共同语言。

WF 3.x发布以来,客户向微软反馈了许多他们所喜欢的和不喜欢的。这些来自使用WF 3.x客户的反馈中,有一个共同点,就是“我们希望像Sequence、Parallel等一样简单。却像StateMachine一样灵活”。当微软深入发掘了这种观点背后的场景时,他们发现客户的过程(或者一部分过程)往往是顺序的,但在某些情况下还要求能够回退(对一些客户来说,这种情况属于“异常”,而对另外一些客户来说,它们则在“期望”之内)。Flowchart是WF 4.0的一个新的活动,它直截了当的解决了这种类型的情况(而且这种情况的数量并不小)。Flowchart是一种非常强大的结构,因为它提供了顺序的简单,再加上回退到上一个执行点的能力,可以用来模拟在处理外部输入时的重试逻辑,而这在现实世界中的业务过程中是非常常见的。

Flowchart包括一组节点和连线(译者注:原文为arc,弧之意,我认为译为连线更加妥当)。节点是FlowNode - 包含了活动或诸如两路决策(译者注:If-Else)和多路切换(译者注:Switch)等专门的通用结构。连线则描述了节点之间的潜在执行路径。WF 4.0的Flowchart有一条执行路径;也就是说,它不支持“分开”或“结合”语义,既不支持多条交错的执行路径。

下图显示了一个使用Flowchart构造的简单招聘过程。在本例中,当接收到简历后,就会去检查求职者的经验。如果经验丰富,过程就继续,否则就拒绝简历。下一步是验证求职者的技能是否符合职位的要求。如果求职者足以胜任该职位,他就会得到这份工作。如果他并不能胜任该职位,但将来也许会需要他,简历就会被保存到数据库中,并发送拒绝信。最后,如果求职者并不能很好的胜任,他就会收到一封拒绝信。

recruiting-process-workflow-using-flowchart

Flowchart建模风格很适合表现那些实质上是顺序的,但包含回退到上一状态的过程。它使用了一种非常著名的方式来进行过程建模(基于“形状”和“箭头”)并且允许以可视化的方式表现过程。流控制受到节点之间的转换,以及两个头等分支活动(FlowDecisionFlowSwitch)的控制。Flowchart非常适合于构造与人类交互的过程(比如人工工作流)。

同时使用Sequence和Flowchart

在WF 3.x工作流中,根活动的观念是:只有根活动才能用作顶级活动。WF 4.0并没有类似的限制。再也没有所谓根活动的概念了。任何活动都可以作为工作流的根活动。

让我们来更加详细地进行解释……活动是WF的工作单元。活动可以组合到一个更大的活动中。当某个活动被用作顶级进入点后,我们就称其为“工作流”,就像Main仅仅是一个用来表示CLR程序的顶级入口点的函数一样。因此,使用Sequence 还是Flowchart作为顶级活动是无关紧要的,并且它们可以随意地进行组合。

下图显示了一个位于Sequence内部的Flowchart。下面的工作流有三个活动:一个复合活动(Do Something),一个Flowchart (突出显示为绿色)以及另一个复合活动(Do Something Else)。

Flowchart-inside-Sequence

同理,在Flowchart中也可以这样做。下图显示了一个Flowchart,它包含一个Sequence (突出显示为绿色)、一个FlowDecision、以及针对决策的TrueFalse路径的两个WriteLine 活动。

Sequence-In-Flowchart

Sequence和Flowchart的背后

WF 4.0简化了活动创作过程,使我们可以更加轻松地编写自定义复合活动来根据我们的选择构造流控制。在以后的文章中,我们还会介绍如何编写自定义活动和设计器。

结论

本文介绍了顺序和Flowchart建模风格。我们了解了Sequence 用来模拟顺序行为,而Flowchart 则用来模拟单路执行和回滚到上一状态。我们还了解了SequenceFlowchart 是可以结合在一起使用的,而且还可以和其他所有现有的活动一起使用。

下表显示了 SequenceFlowchart.的主要区别:

 

Sequence

Flowchart

执行顺序是显式的,接近于编程代码

用图形化的节点和连线来表示执行顺序

组合多个流控制活动来表达回滚(比如While + If

是实现回滚的最佳模式

等同于编程代码

等同于形状和箭头图表

活动按顺序执行

活动的执行顺序由它们之间的箭头方向决定

简单过程、无人类交互(比如服务)

复杂过程、人类交互(比如:人工工作流、状态机场景)

过程流显然并不直观

Boolean值决策活动(FlowDecision)和切换活动(FlowSwitch)使得流控制非常直观

本文翻译自:http://blogs.msdn.com/endpoint/archive/2009/06/12/sequential-and-flowchart-modeling-styles.aspx