版权声明:工作流模式版权归 Workflow Patterns 组 织 ( http://www.workflowpatterns.com ) 所 有 。 经 Workflow Patterns授权,中文简体版由辛鹏和荣浩翻译。未经译者书面许可,不得将该中文简体版用于商业目的。
在流程实例执行时,因为各种原因,我们需要重复执行一些活动或路径。迭代模式讨论流程 实例里的重复行为。
迭代模式共有3种,如图A-47所示。
图A-47 迭代模式
- 任意循环:能够在流程里建立有多个入口和出口的循环。
- 结构化循环:能够重复执行活动或子流程。循环只有一个单一的入口和出口。
- 递归:活动在执行时能够递归调用它自己。
任意循环(WCP_10: Arbitrary Cycles)
描述
流程里的循环具有多个入口和出口。
如图A-48所示,发文流程,如果有领导审批不通过,就返回上一活动重新修改,这样多次往 复修改直到领导满意为止。
图A-48 任意循环
同义词
非结构化循环。
应用
该模式类似于程序里的“goto”,虽然很自然,但是给维护带来噩梦。在我们的项目里,当 用户第一次使用工作流系统进行流程建模时,最常见的情况就是任意循环大量出现,因为这种模 式最适合用户的自然思维,另一方面则是因为很多公司的流程人为干预太过严重,用户甚至要求 能够从任意活动回退到任意前续活动。我们建议这一模式尽量少用。
结构化循环(WCP_21: Structured Loop)
描述
能够重复执行活动或子流程。循环只有单一的入口和出口。该模式有图A-49和图A-50所示的 两种形式。
图A-49 结构化循环:while
图A-50 结构化循环:do while
前提条件
同一时间只能有一个该循环的实例运行。
应用
重复的执行活动直至满足一定的条件为止。与任意循环模式相比,该模式更加贴合计算机语 言,也更加容易被工作流系统所支持。
递归(WCP_22: Recursion)
描述
活动在执行时能够递归调用它自己。该模式反映出流程执行的层次性。
如图A-51所示,每个月底,公司统一对所有出差费用进行报销,财务部门发起一个报销流程, 同时,作为对应,每个部门都发起一系列的报销活动,这些报销活动具体到每个项目团队,每个 团队也都执行一系列的报销活动,这样就构成了一个多层次的递归调用关系,这个层次关系是组 织管理层次的映射。
图A-51 递归