`
jinghwm
  • 浏览: 26132 次
  • 性别: Icon_minigender_1
  • 来自: 重庆
最近访客 更多访客>>
社区版块
存档分类
最新评论

第四章-工作流控制模式之基本模式

阅读更多

源URL:http://www.opug.org.cn/node/391

 

 

我们知道,一个商业目标的实现必定由一系列 的活动组成,这些活动的编排即构成了以目标为导向的业务流程。管理的目标即通过合理有效的编排这些活动以期以最少的成本达到最大的收益。这个编排的过程亦 即进行业务流程建模的过程。在进行业务流程建模时反复出现的活动结构构造即产生了模式。在本章中,我们将讨论工作流的控制模式。控制模式关注业务流程中活 动的编排,一方面强调与实际业务的契合,另一更为重要的方面则是如何合理调配这些活动。

 

本章讨论的控制模式共计43种。需要注意的是,这些模式的出发点是基于对实际业务进行描述的,与具体的工作流系统没有太大的关联。而一个工作流系统对工作流模式的支持程度则直接决定了该系统对业务的建模能力。所以在某种程度上,衡量一个合适的工作流系统时,往往会考虑其对工作流模式的支持程度。

 

本章讨论的控制模式按照描述、应用和实现展开,分别对应着模式的介绍、模式对实际业务的映射和工作流产品对该模式的实现支持。最后是小结。作为约定,我们将业务流程里的活动映射为任务,将对活动的建模描述映射为任务节点。

 

一、       基本控制模式

基本控制模式包括5个模式,是其他控制模式的基础。

 

1、顺序(WCP_01: Sequence

描述

在同一个流程实例里,任务会在前续任务完成后顺序触发。

 

图 4-1

如图4-1所示,任务A执行完毕后会顺序触发任务B的执行,任务B执行完毕后会顺序触发任务C的执行。

 

同义词

顺序执行、串行路由。

 

应用

顺序模式是工作流建模的基础,是流程定义里最基本的构建块,用以描述连续串行的一系列任务,这些任务之间的触发是无条件的。

顺序模式也是实际的业务中应用最多的模式, 当实现一个业务价值需要执行多个任务时,最自然的方式就是排序并顺序完成这些任务,典型的如流水线作业。当企业人数不多,业务模式简单(不需要过多的任务 或任务之间存在很强的线性依赖关系),管理成本很低时,顺序模式是最自然的选择。

 

2、并发分裂(WCP_02: Parallel Split

描述

分支分裂为两个或多个后续分支,当分支执行完毕后触发后续并发分支的同时执行。并发的分支有可能在后续合并为一个分支,也可能不合并。

 

4-2

如图4-2所示,任务A完成后将同时触发任务B和任务C的执行,任务B和任务C的执行不存在前后关系。

 

同义词

AND-splitFork、并行路由、并行分裂。

 

应用

在传统的软件开发里,开发过程被典型的分为了5个阶段,如下图所示:

 

4-3

5个 阶段是顺序执行关系,典型的当需求分析完毕后会有一个需求冻结状态,在这种状态下才开始正式的软件设计和实现。该模式最大的弊端在于在需求分析阶段不可能 捕获用户所有可能的需求,而且客户的需求是变化的,开发阶段由于需求冻结对于客户完全黑盒,导致最后的交付无法实现客户期望的业务价值。

在敏捷开发里,开发过程由多个迭代组成,在每个迭代里,需求分析、架构设计、编码开发、测试和交付都是同时进行的,客户参与到这个过程中,客户能够从不断的交付中提出新的需求,这样软件才能够更好的响应变化,不至于在最终交付时出现业务价值的偏差。

 

4-4

其实从某种角度上看,不同企业的组织管理结构也决定了它所采用的业务流程模式。在图4-3所 示的开发流程里,每个阶段都对应于不同的部门,需求分析有专门的业务部门,开发部门内部分为了架构部门、开发部门和测试部门,交付则又有专门的实施团队, 在这种情况下,从管理的成本考虑,顺序执行无疑是最自然和最便宜的选择(这也是为什么在传统企业里实施敏捷困难的原因之一)。

而在敏捷开发团队里,整个团队则是围绕开发流程建立,减少了内部不必要的协调沟通成本,能够达到相对较高的执行效率。

 

实现

由于后续分支的触发是无条件的,所以在很多工作流产品的实现里省去了AND-split节点,直接由任务节点进行分支分裂,如下图4-5所示:

 

4-5

jBPM使用token记录当前流程实例执行的位置并触发流转,建立起token的父子关系。如下图所示,在AND-split节点每个并发的分支都会产生一个新的子token,当子token到达AND-join节点后即可通过其访问到它的父token,再通过父token遍历其子token即可获得当前并发分支的执行情况并实现合并。

 

4-6

作为约定,我们在后续的说明中,将会采用token来指代当前流程实例所执行的位置。

 

3、同步(WCP_03: Synchronization

描述

两个或多个分支合并为一个后续分支,当被合并的分支都执行完毕后,后续分支才被触发。

 

4-7

如上图所示,当任务A和任务B都完成后,才会触发任务C的执行。

 

同义词

AND-join、汇聚、同步。

 

应用

在实际的应用中,AND-split节点与AND-join节点一般成对出现。

在任何时候,总结总是有必要的,每次迭代开发结束后,我们都会进行迭代小结,写出应该改进的部分、应该保持的部分,以保持整个团队的迭代前进。

实际上,很多情况下AND-split节点和AND-join节点往往隐含着管理意义,上一级的管理者在AND-split节点进行任务的管理和下发,在AND-join节点对任务执行结果进行负责。

 

实现

AND-split节点一样,在部分工作流产品里,直接采用任务节点进行分支合并,如下图所示:

 

4-7

jBPM里,分支的合并实际是token的合并,子token生命周期终止,父token重新激活。

 

4、排他选择(WCP_04: Exclusive Choice

描述

分支分裂为两个或多个后续分支,当分支执行完毕后只能选择触发一个后续分支执行,即多选一。

 

4-9

如上图所示,任务A完成后将会选择触发任务B或任务C的执行,任务B和任务C之间只能选择一个执行。

 

同义词

XOR-split、排他OR-split、条件路由。

 

应用

流程里的决策任务。会存在两种决策方式:人为决策和系统决策。由人或一组系统设定条件根据流程执行情况作出后续执行路径的选择。

 

实现

两种实现方式,一种是在XOR-split节点定义路由选择条件(图4-10)、一种是在后续转移线上定义触发条件(图4-11)。

 

4-10

 

4-11

条件的计算有多种方式:工作流变量与相应条件定义值简单匹配、提供接口由具体实现类返回计算结果、规则引擎进行规则匹配计算。同时,当存在多个后续分支和条件判断时,一般会定义一个默认执行分支。

 

5、简单合并(WCP_05: Simple Merge

描述

两个或多个分支合并为一个后续分支,任何一个分支执行完毕后就会触发后续分支的执行,不需要同步,遵循先进先出的原则。需要注意的是:该模式有个前提条件,即前续分支有且只有一个会执行。

 

4-12

如上图所示,任务A或任务B只要有一个完成都会触发任务C的执行,但是任务A和任务B有且只有一个可以执行。如果任务A和任务B都有可能执行,则变为另外一个模式:多合并模式(WCP_08)。

 

同义词

XOR-join、排他OR-joinmerge

 

应用

在实际的应用中,为保证该模式的前提条件,一般XOR-join节点与XOR-split节点成对使用。

 

实现

AND-join节点一样,因为不需要任何条件判断,所以在部分工作流产品里,直接采用任务节点进行分支简单合并,但是需要和AND-join做出区别,如下图所示:

 

4-13

6、基本控制模式小结

基本控制模式非常简单,实现起来也没有太大的难度。需要注意的是,对于一种模式往往会存在多种实现方式,笔者的建议是:将条件判断的节点独立出来,由其负责条件计算和路径选择,而任务节点则只关注于实际业务的执行,做到职责分离。例如,AND-splitAND-joinXOR-splitXOR-join节点都会单独存在。

可以看到:除去AND-splitAND-join节 点,顺序、排他选择、简单合并模式组合的流程和我们编写程序的逻辑流程图非常的相似,也就是这三种模式能够对程序的逻辑流程图进行建模。于是一件有意思的 事情出现了:有快速开发平台产品使用流程引擎来编排程序逻辑。他们的做法是将细粒度的代码逻辑封装为运算构件,然后再通过流程的可视化编辑器将这些运算构 件粘合起来。这样,传统方式下采用代码实现业务逻辑的过程变成了画流程图的过程。笔者认为这样的实现存在相当大的弊端,相当不合理。首先,编写代码变得复 杂了,明明几十行代码能够实现的逻辑却需要经过编写构件、绘制程序流程图、部署、运行好多步才能实现,编程效率可以想象;其次是代码的执行效率低,程序的 运行需要经过一次流程定义的解释才能执行;然后是这种实现完全牺牲了语言自身的特性,面向过程,很难提供代码级别的单元测试环境,只能提供有限的调试。该 实现实际上是定义了一种简单的流程语言,通过该流程语言来进行功能函数(运算构件)调用的编排。任务编排没有问题,服务编排也没有问题,但是如果编排细粒 度到功能函数,那么就超出了流程引擎的作用域。提升编程效率的最好途径总是语言而不是工具。

分享到:
评论

相关推荐

    驰骋工作流引擎源码

    驰骋工作流引擎源码 产品名称: 驰骋.net工作流程引擎. 运行环境: BS结构. windows xp, windows server. win7 IIS6.0以上. .net4.0. Office2007 (如果需要单据打印.) 开发语言: VS2010, .net4.0 c#.net. 客户端: ...

    华为HCIP-RS V2.5培训视频教程【共42天242集】.rar

    目录:网盘文件,永久链接 第一天-OSPF-简介 第二天-OSPF-端口状态、hello报文、DD报文主从选举 第三天-OSPF-DD报文 第四天-OSPF-一类LSA 第五天-OSPF-DR、BDR ...第四十二天-QoS-拥塞管理和避免、流量监管、流

    Quartz-Job-Scheduling-Framework-中文版-V0.9.1.zip

    中文版目录总汇及内容提要 第一章. 企业应用中的作业调度 ... 工作流中使用 Quartz (第四部分) 内容提要:用 Workflow Job 来启动、运行工作流,通 JobDataMap 来传递工作流名称,transientVars 等。

    大象--Thinking in UML

    第6章 统一过程核心工作流简介 第三部分 进阶篇——在实践中思考 第8章 准备工作 第9章 获取需求 第10章 需求分析 第11章 系统分析 第12章 系统设计 第13章 开发 第14章 测试 第四部分 高级篇——在提炼中思考 第15...

    《疯狂Workflow讲义:基于Activiti的工作流应用开发》

    第4部分:如何在实际企业应用中使用Activiti,并与其他流行的开源框架进行整合,包括企业应用开发所必需的Web Service、企业服务总线、规则引擎、IoC框架和ORM框架等,除了本书主要的Activiti知识外,这些企业中常用...

    azkaban玩转热门大数据调度系统视频教程

    第四章:Azkaban开发实战 1.Azkaban工作流开发规则 2.Azkaban调度Shell脚本实战 3.Azkaban调度HDFS实战 4.Azkaban调度MapReduce实战 5.Azkaban调度Hive实战 6.Azkaban子流的实战 7.Azkaban复杂调度实战 8....

    day020-继承加强和设计模式代码和笔记.rar

    即当前类所在路径及其引用的第三方类库的路径,如第四节中的问题6所述)下的类库 加载到内存中。 开发者可以直接使用系统类加载器。 5. 设计模式:(框架中使用,是程序设计的高级思想) 1. 单例模式...

    siebel工作流管理指南

    第 4 章:计划工作流程过程 为工作流程过程计划收集信息 31 了解工作流程过程要求 32 植入的工作流程过程 32 在计划工作流程过程时考虑业务对象和业务服务 33 为业务对象定义主要业务组件 33 为工作流程过程启用业务...

    微软应用架构指南(第2版)

     第4章架构和设计的方法 设计基础篇  第5章分层应用程序指导原则  第6章表现层指导原则  第7章业务层指导原则  第8章数据层指导原则  第9章服务层指导原则  第10章组件指导原则  第11章设计表现组件  第12...

    flink入门到精通视频教程

    第四章 Dataset开发 01.入门案例 02.入门案例-构建工程、log4j.properties 03.入门案例-代码运行yarn模式运行 04.DataSource-基于集合 05.DataSource-基于文件 06.Transformation开发 07.Datasink-基于集合 08.Data...

    SQL Server 2008商业智能完美解决方案 3/3

    第4章 商业智能解决方案的物理架构 63 4.1 物理基础结构更改的规划 63 4.1.1 创建准确的基线调查 63 4.1.2 评估当前的服务级别协议 64 4.2 确定服务器的最优数量和最佳位置 65 4.2.1 物理服务器的考虑 67 4.2.2 逻辑...

    SQL Server 2008高级程序设计 1/6

    第4章 XML集成  4.1 XML数据类型  4.2 提取XML格式的关系数据  4.3 有关XML索引的提示  4.4 层次数据概述  4.5 小结 第5章 细心推敲,大胆设计  5.1 进一步了解规范化  5.2 关系  5.3 图表  5.4 ...

    SQL Server 2008高级程序设计 2/6

    第4章 XML集成  4.1 XML数据类型  4.2 提取XML格式的关系数据  4.3 有关XML索引的提示  4.4 层次数据概述  4.5 小结 第5章 细心推敲,大胆设计  5.1 进一步了解规范化  5.2 关系  5.3 图表  5.4 ...

    SQL Server 2008高级程序设计 3/6

    第4章 XML集成  4.1 XML数据类型  4.2 提取XML格式的关系数据  4.3 有关XML索引的提示  4.4 层次数据概述  4.5 小结 第5章 细心推敲,大胆设计  5.1 进一步了解规范化  5.2 关系  5.3 图表  5.4 ...

    python入门到高级全栈工程师培训 第3期 附课件代码

    第4章 01 上节课复习 02 创建用户相关的文件 03 用户增删该查及组相关操作 04 对文件的权限管理 05 对目录的权限管理 06 权限管理补充 07 属主属组及基于数字的权限管理 第5章 01 上节课复习 02 文件合并与文件...

    漫谈大数据第四期-storm

    Storm为分布式实时计算提供了一组通用原语,可被用于“流处理”之中,实时处理消息并更新数据库。这是管理队列及工作者集群的另一种方式。 Storm也可被用于“连续计算”(continuous computation),对数据流做连续...

    SQL Server 2008高级程序设计 4/6

    第4章 XML集成  4.1 XML数据类型  4.2 提取XML格式的关系数据  4.3 有关XML索引的提示  4.4 层次数据概述  4.5 小结 第5章 细心推敲,大胆设计  5.1 进一步了解规范化  5.2 关系  5.3 图表  5.4 ...

    SQL Server 2008高级程序设计 5/6

    第4章 XML集成  4.1 XML数据类型  4.2 提取XML格式的关系数据  4.3 有关XML索引的提示  4.4 层次数据概述  4.5 小结 第5章 细心推敲,大胆设计  5.1 进一步了解规范化  5.2 关系  5.3 图表  5.4 ...

    SQL Server 2008高级程序设计 6/6

    第4章 XML集成  4.1 XML数据类型  4.2 提取XML格式的关系数据  4.3 有关XML索引的提示  4.4 层次数据概述  4.5 小结 第5章 细心推敲,大胆设计  5.1 进一步了解规范化  5.2 关系  5.3 图表  5.4 ...

Global site tag (gtag.js) - Google Analytics