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

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

阅读更多

 

 <!----><o:p></o:p>

流程模型分析(3<o:p></o:p>

              ——流程发散聚合模型

 <o:p></o:p>

 <o:p></o:p>

三、流程的运转模型<o:p></o:p>

3.1 基本运转模型<o:p></o:p>

串行(Sequence<o:p></o:p>

自循环<o:p></o:p>

3.2 发散运转模型<o:p></o:p>

并行(Parallel<o:p></o:p>

独占式选择(Exclusive Choice<o:p></o:p>

鉴别式选择(Discriminator Choice<o:p></o:p>

抄送模型<o:p></o:p>

发散模型<o:p></o:p>

3.3 聚合运转模型<o:p></o:p>

同步聚合(synchronize merge<o:p></o:p>

简单聚合(Simple Merge<o:p></o:p>

多重聚合(Multiple Merge<o:p></o:p>

鉴别式聚合(Discriminator Merge<o:p></o:p>

 <o:p></o:p>

 <o:p></o:p>

三、流程的运转模型

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

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

 <o:p></o:p>

3.1 基本运转模型

 <o:p></o:p>

串行(Sequence

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

<!----><v:shapetype o:spt="75" coordsize="21600,21600" stroked="f" id="_x0000_t75" filled="f" o:preferrelative="t" path="m@4@5l@4@11@9@11@9@5xe"><v:stroke joinstyle="miter"></v:stroke><v:formulas><v:f eqn="if lineDrawn pixelLineWidth 0"></v:f><v:f eqn="sum @0 1 0"></v:f><v:f eqn="sum 0 0 @1"></v:f><v:f eqn="prod @2 1 2"></v:f><v:f eqn="prod @3 21600 pixelWidth"></v:f><v:f eqn="prod @3 21600 pixelHeight"></v:f><v:f eqn="sum @0 0 1"></v:f><v:f eqn="prod @6 1 2"></v:f><v:f eqn="prod @7 21600 pixelWidth"></v:f><v:f eqn="sum @8 21600 0"></v:f><v:f eqn="prod @7 21600 pixelHeight"></v:f><v:f eqn="sum @10 21600 0"></v:f></v:formulas><v:path gradientshapeok="t" o:connecttype="rect" o:extrusionok="f"></v:path><o:lock v:ext="edit" aspectratio="t"></o:lock></v:shapetype><v:shape type="#_x0000_t75" id="_x0000_i1025" style="WIDTH: 285pt; HEIGHT: 55.5pt"><v:imagedata src="file:///C:/DOCUME~1/ADMINI~1/LOCALS~1/Temp/msoclip1/01/clip_image001.jpg" o:title="3-1"></v:imagedata></v:shape>

图(3-1<o:p></o:p>

自循环

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

 <o:p></o:p>

<v:shape type="#_x0000_t75" id="_x0000_i1026" style="WIDTH: 324.75pt; HEIGHT: 72.75pt"><v:imagedata src="file:///C:/DOCUME~1/ADMINI~1/LOCALS~1/Temp/msoclip1/01/clip_image003.jpg" o:title="3-2"></v:imagedata></v:shape>

图(3-2<o:p></o:p>

 <o:p></o:p>

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

 <o:p></o:p>

3.2 发散运转模型

 <o:p></o:p>

并行(Parallel

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

<v:shape type="#_x0000_t75" id="_x0000_i1027" style="WIDTH: 4in; HEIGHT: 93pt"><v:imagedata src="file:///C:/DOCUME~1/ADMINI~1/LOCALS~1/Temp/msoclip1/01/clip_image004.jpg" o:title="3-3"></v:imagedata></v:shape>

图(3-3<o:p></o:p>

 <o:p></o:p>

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

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

<v:shape type="#_x0000_t75" id="_x0000_i1028" style="WIDTH: 312.75pt; HEIGHT: 92.25pt"><v:imagedata src="file:///C:/DOCUME~1/ADMINI~1/LOCALS~1/Temp/msoclip1/01/clip_image006.jpg" o:title="3-4"></v:imagedata></v:shape>

图(3-4<o:p></o:p>

 <o:p></o:p>

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

 <o:p></o:p>

 <o:p></o:p>

独占式选择(Exclusive Choice

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

 <o:p></o:p>

<v:shape type="#_x0000_t75" id="_x0000_i1029" style="WIDTH: 308.25pt; HEIGHT: 88.5pt"><v:imagedata src="file:///C:/DOCUME~1/ADMINI~1/LOCALS~1/Temp/msoclip1/01/clip_image008.jpg" o:title="3-5"></v:imagedata></v:shape>

图(3-5<o:p></o:p>

 <o:p></o:p>

鉴别式选择(Discriminator Choice

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

<v:shape type="#_x0000_t75" id="_x0000_i1030" style="WIDTH: 281.25pt; HEIGHT: 80.25pt"><v:imagedata src="file:///C:/DOCUME~1/ADMINI~1/LOCALS~1/Temp/msoclip1/01/clip_image010.jpg" o:title="3-6"></v:imagedata></v:shape>

图(3-6<o:p></o:p>

 <o:p></o:p>

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

 <o:p></o:p>

抄送模型

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

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

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

<v:shape type="#_x0000_t75" id="_x0000_i1031" style="WIDTH: 311.25pt; HEIGHT: 93pt"><v:imagedata src="file:///C:/DOCUME~1/ADMINI~1/LOCALS~1/Temp/msoclip1/01/clip_image011.jpg" o:title="3-7"></v:imagedata></v:shape>

图(3-7<o:p></o:p>

 <o:p></o:p>

 <o:p></o:p>

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

 <o:p></o:p>

发散模型

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

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

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

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

 <o:p></o:p>

<v:shape type="#_x0000_t75" id="_x0000_i1032" style="WIDTH: 350.25pt; HEIGHT: 126pt"><v:imagedata src="file:///C:/DOCUME~1/ADMINI~1/LOCALS~1/Temp/msoclip1/01/clip_image013.jpg" o:title="3-8"></v:imagedata></v:shape>

图(3-8<o:p></o:p>

 <o:p></o:p>

3.3 聚合运转模型

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

同步聚合(synchronize merge

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

<v:shape type="#_x0000_t75" id="_x0000_i1033" style="WIDTH: 405pt; HEIGHT: 138pt"><v:imagedata src="file:///C:/DOCUME~1/ADMINI~1/LOCALS~1/Temp/msoclip1/01/clip_image015.jpg" o:title="3-9"></v:imagedata></v:shape>

图(3-9<o:p></o:p>

 <o:p></o:p>

简单聚合(Simple Merge

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

 <o:p></o:p>

<v:shape type="#_x0000_t75" id="_x0000_i1034" style="WIDTH: 320.25pt; HEIGHT: 105pt"><v:imagedata src="file:///C:/DOCUME~1/ADMINI~1/LOCALS~1/Temp/msoclip1/01/clip_image017.jpg" o:title="3-10"></v:imagedata></v:shape>

图(3-10<o:p></o:p>

 <o:p></o:p>

多重聚合(Multiple Merge

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

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

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

<v:shape type="#_x0000_t75" id="_x0000_i1035" style="WIDTH: 311.25pt; HEIGHT: 102pt"><v:imagedata src="file:///C:/DOCUME~1/ADMINI~1/LOCALS~1/Temp/msoclip1/01/clip_image019.jpg" o:title="3-11"></v:imagedata></v:shape>

图(3-11<o:p></o:p>

 <o:p></o:p>

鉴别式聚合(Discriminator Merge

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

      

 <o:p></o:p>

<v:shape type="#_x0000_t75" id="_x0000_i1036" style="WIDTH: 320.25pt; HEIGHT: 105pt"><v:imagedata src="file:///C:/DOCUME~1/ADMINI~1/LOCALS~1/Temp/msoclip1/01/clip_image021.jpg" o:title="3-12"></v:imagedata></v:shape>

图(3-12<o:p></o:p>

 <o:p></o:p>

 <o:p></o:p>

 <o:p></o:p>

 <o:p></o:p>

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

作者:胡长城 (银狐999 james999

Emailjames-fly@vip.sina.com

 

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics