工作流模型分析(3)——流程发散聚合模型(有图)

类别:软件工程 点击:0 评论:0 推荐:

 

流程模型分析(3

              ——流程发散聚合模型

 

 

三、流程的运转模型

3.1 基本运转模型

串行(Sequence)

自循环

3.2 发散运转模型

并行(Parallel)

独占式选择(Exclusive Choice)

鉴别式选择(Discriminator Choice)

抄送模型

发散模型

3.3 聚合运转模型

同步聚合(synchronize merge)

简单聚合(Simple Merge)

多重聚合(Multiple Merge)

鉴别式聚合(Discriminator Merge)

 

 

三、流程的运转模型

这里将是本文最为核心的地方了,什么是工作流,也将在其运转模型中体现。

任何事物都是循序渐进的,由简单到复杂。我们先来看看最为基本的集中运转模型

 

3.1 基本运转模型

 

串行(Sequence)

串行,是最为简单,也最为容易理解的模型。按照预定的任务列表(Task A,Task B,Task C),有序的执行,如下图(3-1)所示。

图(3-1

自循环

自循环的模型,主要用于表示:同一个任务节点,重复的执行多次。

 

图(3-2

 

如图中所显示。“模式2”比“模式1”多了一个鉴别节点(Discriminator Node)。这两种模式,在现实中应用的都较为广泛,其中“模式1”更多的偏向人为的选择,也就是说,在任务执行后,由人为的决定是否继续重复的执行这次任务;而“模式2”则更多的倾向于一个既定的规则,按照原有的规则,决定是否重复执行。

 

3.2 发散运转模型

 

并行(Parallel)

并行,就涉及到流程的分支概念。就是说在流程运行过程中,因为不同的条件或情况,或者处理的业务需要多部门(多任务)分开处理,而产生了流程分支。如下图所示

图(3-3

 

流程在执行完任务A后,因为需要,产生了两个并发执行的分支(A——B和A——C)。这两个分支之间是对等的,也是并行执行的。

有关上面的流程图,可能在以后的一些文章/文档中,大家会看到下面类似的图形

图(3-4

 

虽然比上图多了一个And选择器,但实际上,两图,表示的是同一个含义或模型。所以大家在应用或读书的时候,可以长个心眼哦,自己学会实质性的分析。

 

 

独占式选择(Exclusive Choice)

当一个任务处理完后,发现其后面可允许走多个分支流程,但只允许选择其中某一个分支运行。这个选择是人为决策的,预先没有设点选择的规则。

 

图(3-5

 

鉴别式选择(Discriminator Choice)

这同前面的“独占式选择”很相似,唯一不同点,就是多了一个鉴别器(Discriminator)。当任务达到这个鉴别器的时候,鉴别器会根据当前流程所处的状态,对比预先设定的一些选择规则,自动判别接下来流程的流向,也就是自动根据条件,选择一个满足条件的分支运行。

图(3-6

 

鉴别器模式(有的可能叫选择器等等名字,表达的意思基本相同),在现实应用中较为广泛。比如在订单申请流程中,设定一个依据数额判别流向的鉴别器,如果数额大于等于5000就走分支流程A,如果数额小于5000就走分支流程B。

 

抄送模型

抄送模型,本身不是一个标准的工作流运转模型,但是在现实应用中,比比皆是。

它表达的意思是(请参考下图),存在主流程(A——C),在一个任务(A)执行完毕后,会继续执行主流程上下一个预定任务(C),但是同时也会激活另一任务(B)(或另外的流程)的执行,但是任务B以及任务B的后续流程,不会对主流程运转造成影响。

请注意图中的 A——B流程沿线,用的是灰色虚线表示,而且任务B也同样采用灰色表示。

图(3-7

 

 

       来个举个电子办公系统中,经常遇到得例子说明一下:比如一个发文,在交司局会签的时候,可能会抄送一份给另外的司局备案,这个过程就或额外的激活一个不影响主会签流程的“抄送任务”,比如图中Task B。

 

发散模型

说到这里,大家可再回过头参看一下并行模型(3.2.1节)。发散和并行最大的区别就是,各个分支(branch)的流程状态(或流程数据):

在并行模型中,分支状态(A-B)与分支状态(A-C)是大多数情况下是不相等的。由任务A执行后的状态进行一定条件下的“拆分”,形成了两个分支(或多个分支)流程。这多个分支流程,在最终需要重新聚合成一个主流程,以确保流程信息的完整性(当然,实际运行中,可能存在因为超时等特定原因而最终抛弃某个子流程)。

而在发散模型中,分支状态(A-B)与分支状态(A-C)是绝对相等的。因发散而产生的多个分支流程,在最终未必聚合(可能因为种种原因,聚合的时候会抛弃一个和多个分支流程)。

这里面说到了“聚合”概念,在后续的介绍上,将加以详细叙述

 

图(3-8

 

3.3 聚合运转模型

下面我们就将进入聚合模型的介绍。因为有了“发散”,在一个流程的后续运转中,才会出现“聚合”这个问题。所以在后续讨论聚合模型的时候,大多情况下都会结合上面的发散运转模型。

同步聚合(synchronize merge)

由必要说明一下,同步聚合,可不是“同时聚合”噢。

图(3-9

 

简单聚合(Simple Merge)

虽然名为简单聚合,不过在现实应用中,其理解度和应用度,都基本上比上面的“同步聚合”要难。多分支在聚合的时候,采用类似于“先进先出”法则,哪一个分支先达到,则最先激活流程的运行。后续的分支则到此就会终止。

 

图(3-10

 

多重聚合(Multiple Merge)

多重聚合,与上面的简单聚合有些相似。但是比起Simple Merge可就复杂多了。到目前为止,在现实中,我还没有碰到过这样的流程实施。

       多分支在聚合的时候,采用类似于“先进先出”法则,但是不同于简单聚合的是,任何一个分支,在到达这个聚会点的时候,均会激活后续流程的运转。

              这就涉及到一个问题了,如果一个后续流程实例刚刚被激活,又一个分支到达,那么这个分支是否激活后续流程实例呢?在不同的工作流引擎中(workflow enginner)中会有不同的解决方案,有的选择立即激活,有的选择等待延迟激活。就这一点来说,不是本文的讨论主题,有兴趣的朋友,可以在自己的引擎中实现不同的方式。

图(3-11

 

鉴别式聚合(Discriminator Merge)

这个是较为容易理解的,显示应用中也常常碰到,但是在应用的实施难度较大,因为一般与其配合的都会存在一个“规则引擎”,来定义/处理聚合规则

      

 

图(3-12

 

 

---------------------------

作者:胡长城 (银狐999 , james999)

Email:[email protected]

 

本文地址:http://com.8s8s.com/it/it37534.htm