`
ww2
  • 浏览: 402748 次
  • 性别: Icon_minigender_1
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

工作流模式详解之基本流程控制模式的应用与设计(1、2、3、4、5)

阅读更多

  我们前面已经详细叙述了5种基本的工作流控制模式,包括:Sequence、AND-split(Parallel Split)、AND-join(Synchronization)、XOR-Split(Exclusive Choice)、XOR-join(Simple Merge)。

1. 感叹国情

  一个显而易见的事情浮出了水面。我们刚开始学习写程序的时候,那种流程图,实际上就是 Sequence、XOR-Split、XOR-join 这三种模式的组合。可见工作流的内涵并不只是业务流程而已。为什么要讲流程图呢?因为在我所接触的业务流程相关的开发中,一些没经过工作流训练,或者新手,通常就是直接的把业务流程和做算法设计的流程图对等起来。至今仍然有一些小公司自开发的工作流引擎,就是这种流程图模型。

  我们可以做一个简单的对等,流程图中普通的矩形框就是 Sequence 模式,菱形框(条件判断)就是 XOR-Split,而一个矩形框接受多个分支作为前躯的情况就是 XOR-join。首先我们在理论上注意到 XOR-join 有一个限制条件,就是有且只有一个前躯执行,很明显只用 XOR-Split 就能很轻易的达到这个要求(这个结论有数学上的证明)。

  这个事实有点令人沮丧,可以从一个侧面反映我们人才的断层,似乎做应用系统的只有程序员一种人。不过实际情况还没有超出控制,因为我们做的应用主要集中于政府采购,而对于现阶段的电子政务来说,这种流程图的方式应该是足以应付了。下面我们来看看为什么这三种模式形成的流程设计能适应我国电子政务的现状:

●政府部门各自为政,也就常说的"信息孤岛"。业务流程的主体基本上是同一个单位,无须考虑协作、沟通或并发的问题。

●政府部门不太关心业务流程的效率和质量,我们的公务员大爷也懒惰异常,他们宁愿漫长的等待,减少沟通和协作(退化成顺序模式),也不愿为了加快工作效率而增加工作量(并发执行,相互协作)。

●开发者兼任咨询顾问的这种普遍形式,鉴于并发所带来的问题,有意的将流程的设计退化,使之成为顺序+条件选择的方式。尤其是让一个政府机构内部的各个部门配合起来,要牵涉的多次会议、决策与红头文件,实在是对开发计划、周期和成本的一个重大打击。

●还有就是依赖于商务操作的一些小开发商,鉴于技术问题,也尽量引导业主回避并发的流程设计。

●最后这一点似乎也是最为普遍的,就是做分析设计的就是程序员(归根结底是人才断层),或多或少的把业务流程和自己学习程序设计时候的流程图等同起来。更有时候,恰巧业主方面的项目负责人有少许写程序的基础(这个是托计算机等级考试的福),也以为信息化的流程设计,与程序设计的流程图是一样的。

  所以,总的来说,使我们工作流的水平还不到家,无论是分析设计水平还是开发水平。在电子政务能用到"并联审批"(AND-Split)这一概念的,已经能算是较为前卫。所以我们现在业务流程的设计,也多停留在这五种基本模式的应用上。

2. 应用

  这5个模式较为明确,一般在流程设计中考虑,如没有可并发性工作的考虑,都能用 Sequence、XOR-Split、XOR-join 这三种模式来解决。稍微高级点的就是"并联审批"这种业务,一般是采用 AND-Split 考虑。所谓"天下大势,分久必合,合久必分",Split 以后,一定要配合相应的 join 处理。尤其是考虑到并发以后可能出现的分支情况。

  若不想出现难以预料的流程,则我建议是将其设计控制在特定的闭包范围内。譬如说 Sequence、AND-Split、AND-Join 一个闭包,Sequence、XOR-Split、XOR-Join 一个闭包。在 AND-Split 与 And-Join 中,最好不要穿插 XOR 关系,或者保证其嵌套层次不能交叉。

3. 应用实例

  A. 汇签

  需求:组织结构,三个部门,每个部门一个负责人,所有部门都向总经理负责。如果一个方案是涉及层面较广的(譬如工资改革方案等等),则由主管部门发起,首先普通员工草拟方案,给部门经理审批,再给其他部门的经理审批,再给总经理审批。这样,再主管部门经理给其他部门经理审批这一步,就产生了一个汇签的过程。

  设计方案:

  

  在没有更高级模式的支持下,这种设计方案似乎是较好的选择(以后的模式里面会有更好的解决方案)。这里有比较典型的 AND 合 XOR 应用,其中 XOR 判断的条件是执行者是否主管部门,如果是主管部门,那就已经审批过了,不参与汇签。

   PS:这里没有给出审批不通过的情况,但是这种设计加上审批否决的部分较为简单,这里就不再叙述。

  现在考虑更为普遍的情况,泛化为N个经理的情况“并联会签”,怎么办呢?可以考虑这样设计:

  

   上面这一设计牵涉并发,可以看到引入了一个AND就使情况复杂了。为了表示方便,我把XOR-Join 和 XOR-Split 分开两个结点表示,一些工作流设计系统中可能只需要用一个结点就能表示了。

  我们来看看具体流程:假设公司一共有4个经理,A、B、C、D。假设主管经理是A,然后审批方案后要交给B、C、D来汇签。其中 AND 结点引入,保证了在参与汇签者的列表中取出参与汇签者以后实现“并联审批”,取 B 以后,就马上启动并发流程:寻找下一个审批参与者和 B 执行审批动作,然后一直取 C、D,同理。注意流程的两个 XOR-Split,一个是判断审批完毕,一个是判断是否开始了审批,其中不尽相同。

  思考:审批不通过的情况,该怎么办?国人的流程较为复杂,审批不通过的有可能是 B、C、D 其中 B 没有通过,但是 C、D 不需要再次审批(这种情况通常是方案中有属于不同部门的描述,所谓的汇签,大家都只关心方案中与自己部门相关的部分就可以了)。也有的情况是任何一个人不通过,所有经理都要重新审批。更有可能是“民主制”,B、C、D之中只要2个通过就能递交到下一步审批。不过就目前来说,只有基本的5种模式还不足以表达这些多变的流程,因此技术平台无法支持更高级的工作流模式的情况下,我们作为应用开发人员只能编写代码来解决。更深层次的自省是:当我自己设计一个流程的时候,较多的用编写代码的方式来表达实际业务,还是较多的上升到工作流模型设计的层次来解决问题呢?我觉得如果是前者,那么就要小心谨慎了,多半是自己工作流设计的水平不足,或者选择的工作流引擎/平台的能力较低(前者自我水平不足,后者产品选型的决策偏差,若是自开发的工作流引擎则表明还有的缺陷,不能较好的支撑多变的业务,都不见得是好事情)。

  这里给出的办法,只是用现有的工作流模式的实现,以后讲述的模式中有更为直接的组合来实现这个汇签模型。但是这些方案也可以给无法使用高级工作流模式的朋友们参考使用。
   
  B. 代理审批

  需求:领导外出,要找人来代替审批。我接触过许多流程的设计者都卡在了这个地方,思维都集中在了怎么去设计者个临时加一个权限进取,然后所带来的"动态权限"系统的复杂性。这种可能是程序员的惯性思维,需求结构直接影射到代码结构的一个典型吧。其实大可不必这样做。

  设计方案:

  

 

  这样就能很简单的解决代理审批的问题。

4. 总结

  有心的读者都可以看出来,在设计这几个流程之中,我们试图把条件判断而产生的路径选择,独立出一个结点(或者几个结点),而每个有实际工作结点的本身都只负责条件判断和路径选择以外的实质性业务。这里涉及到流程设计的一个理念(我喜欢称之为个人哲学),以后另外有文章叙述流程设计的体会。

  我这是我在实际流程设计中的一些经验,希望各位来指正批评。

分享到:
评论

相关推荐

    log4Net详解(共2讲)

    4、项目实战篇: Extjs3.2+ASP.NET七层架构+设计模式+ log4j+WebSerice等技术国讯教育通用智能OA办公平台 适用对象 1、要求有一定的javascript语言和HTML,CSS基础的学员 2、有一定的Asp.net网页编程基础和C#语言...

    嵌入式Linux应用程序开发详解

    第1章 Linux快速入门 1 1.1 嵌入式Linux基础 1 1.1.1 Linux发展概述 1 1.1.2 Linux作为嵌入式操作系统的优势 2 1.1.3 Linux发行版本 3 1.1.4 如何学习Linux 4 1.2 Linux安装 5 1.2.1 基础概念 5 ...

    安防天下智能网络视频监控技术详解与实践part2

    9.4.2 视频分析的工作流 263 9.4.3 视频分析算法模块 264 9.4.4 视频分析过程 267 9.5 视频分析技术难点 269 9.5.1 环境因素 269 9.5.2 视频场景相关因素 270 9.5.3 平台及芯片的限制 270 9.5.4 成像...

    安防天下智能网络视频监控技术详解与实践.part3

    9.4.2 视频分析的工作流 263 9.4.3 视频分析算法模块 264 9.4.4 视频分析过程 267 9.5 视频分析技术难点 269 9.5.1 环境因素 269 9.5.2 视频场景相关因素 270 9.5.3 平台及芯片的限制 270 9.5.4 成像因素 271...

    asp.net知识库

    与DotNet数据对象结合的自定义数据对象设计 (二) 数据集合与DataTable 与DotNet数据对象结合的自定义数据对象设计 (一) 数据对象与DataRow ASP.NET中大结果集的分页[翻译] .net 2.0 访问Oracle --与Sql Server的...

    windows驱动开发技术详解-part2

     第4章 驱动程序的基本结构  本章首先对Windows驱动程序的两个重要数据结构进行介绍,分别是驱动对象和设备对象数据结构。另 外还要介绍NT驱动程序和WDM驱动程序的入口函数、卸载例程、各种IRP派遣上函数等。  ...

    Windows驱动开发技术详解的光盘-part1

     第4章 驱动程序的基本结构  本章首先对Windows驱动程序的两个重要数据结构进行介绍,分别是驱动对象和设备对象数据结构。另外还要介绍NT驱动程序和WDM驱动程序的入口函数、卸载例程、各种IRP派遣上函数等。  ...

    安防天下智能网络视频监控技术详解与实践part1

    共3卷,卷1,卷2,3不需资源分。 共3卷,卷3. 第1章 视频监控技术概述 1 1.1 引子 2 1.1.1 安全防范的雏形 2 1.1.2 网络视频监控 2 1.1.3 智能视频识别 2 1.1.4 智能网络视频监控 3 1.2 视频监控技术...

    嵌入式Linux应用程序开发标准教程(第2版全)

    《嵌入式Linux应用程序开发标准教程(第2版)》主要分为3个部分,包括Linux基础、搭建嵌入式Linux环境和嵌入式Linux的应用开发。Linux基础部分从Linux基础、基本操作命令讲起,为Linux初学者能快速入门提供了保证。...

    Java Web程序设计教程

    5.2.1struts2的工作流程 84 5.2.2struts2的简单应用 85 5.3struts2基础 87 5.3.1action详解 88 5.3.2结果与视图 91 5.3.3struts.xml的配置 94 5.4值栈与ognl表达式 100 5.5struts2的标签库 103 5.5.1控制...

    精通SQL 结构化查询语言详解

    《精通SQ:结构化查询语言详解》全面讲解SQL语言,提供317个典型应用,读者可以随查随用,针对SQL Server和Oracle进行讲解,很有代表性。 全书共包括大小实例317个,突出了速学速查的特色。《精通SQ:结构化查询语言...

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

    02 Django的ORM基本操作补充之一对多 03 学员管理示例:编辑学生 04 Django的ORM基本操作补充之多对多 05 学员管理示例:为班级分配老师 06 初识Ajax以及简单应用 07 学员管理示例:Ajax删除学生 08 本节作业以及...

    精通SQL--结构化查询语言详解

    第1章 数据库与sql基础 1 1.1 数据库的基本概念 1 1.1.1 数据库的由来 1 1.1.2 数据库系统的概念 3 1.2 数据库系统的结构、组成及工作流程 3 1.2.1 数据库的体系结构 3 1.2.2 数据库系统的组成 4 1.2.3 ...

    ASP.NET3.5典型模块开发源代码

    28.1.2 工厂设计模式在Pet Shop 4.0中的应用 374 28.2 数据层的数据库访问 375 28.2.1 数据访问接口IDAL 375 28.2.2 数据访问的实现类 377 28.2.3 数据访问工厂类DALFactory的实现 379 28.3 数据层中的...

Global site tag (gtag.js) - Google Analytics