<!----><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>
串行,是最为简单,也最为容易理解的模型。按照预定的任务列表(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:extrusionok="f" o:connecttype="rect"></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>
并行,就涉及到流程的分支概念。就是说在流程运行过程中,因为不同的条件或情况,或者处理的业务需要多部门(多任务)分开处理,而产生了流程分支。如下图所示
<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——B和A——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>
当一个任务处理完后,发现其后面可允许走多个分支流程,但只允许选择其中某一个分支运行。这个选择是人为决策的,预先没有设点选择的规则。
<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)。当任务达到这个鉴别器的时候,鉴别器会根据当前流程所处的状态,对比预先设定的一些选择规则,自动判别接下来流程的流向,也就是自动根据条件,选择一个满足条件的分支运行。
<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>
虽然名为简单聚合,不过在现实应用中,其理解度和应用度,都基本上比上面的“同步聚合”要难。多分支在聚合的时候,采用类似于“先进先出”法则,哪一个分支先达到,则最先激活流程的运行。后续的分支则到此就会终止。
<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>
多重聚合,与上面的简单聚合有些相似。但是比起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>
这个是较为容易理解的,显示应用中也常常碰到,但是在应用的实施难度较大,因为一般与其配合的都会存在一个“规则引擎”,来定义/处理聚合规则
<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>
---------------------------
作者:胡长城 (银狐999 , james999)
Email:james-fly@vip.sina.com
相关推荐
工作流模型分析是业务流程管理中的关键组成部分,它涉及到如何设计和理解流程的执行路径。在分析工作流模型时,我们需要关注多个方面,包括流程的起点、激活方式、运转模式以及流程的组合和嵌套。 1. **流程的起点...
本文件"工作流模型分析.pptx"详细介绍了多种常见工作流模型及其特点,包括任务与活动、流程起点、流程激活和流程运转模型。 首先,活动(Activity)是工作流模型中最基础的元素,代表流程中的一个逻辑步骤。它可以...
根据给定文件的信息,我们可以深入探讨工作流模型的相关知识点,特别是关于任务(Task)与活动(Activity)的区别、工作流的不同模型及其应用场景。 ### 任务与活动 在工作流领域,活动(Activity)是WFMC(Workflow ...
通过以上分析,我们可以看到工作流模型的多样性,每种模型都有其适用场景,企业可以根据自身需求灵活选择和设计工作流,以达到最佳的业务效果。工作流引擎的设计与实施是一项复杂而精细的工作,需要深入理解业务流程...
**WfMC工作流模式**提供了几种常见工作流模型,包括任务与活动、流程起点模型、流程激活模型和流程运转模型等。 1. **任务与活动**:在WfMC标准模型中,“活动”(Activity)描述了一个逻辑步骤,是流程运转的最小...
创新思维训练第三四讲——发散思维.ppt
通过以上分析可以看出,工作流模式的设计非常灵活多样,可以根据实际需求定制出符合企业业务特点的工作流模型。这不仅有助于提高工作效率,还能确保业务过程的准确性和合规性。在未来的发展中,随着技术的进步和应用...
成信工作流引擎采用了单一的启动节点模型来确保流程的唯一性和可控性。 **1.1.1 启动节点(SingleStartNode)** 启动节点作为工作流的第一个节点,通常用于定义流程的起始条件和触发机制。在成信的工作流模型中,这...
教师资格考试、教师招聘考试资料——发散思维训练的方法.pdf
标题中的“解决ukf在模型不匹配时出现的发散或者不稳定”指的是在使用Unscented Kalman Filter(UKF)算法时遇到的问题。UKF是一种非线性滤波方法,广泛应用于导航、控制、估计等领域,尤其适用于处理非线性系统。...
【数学分析——级数部分知识点】 数学分析中的级数部分是微积分理论的重要组成部分,主要研究无穷级数的收敛性和性质。以下是对这部分内容的详细梳理: 1. **级数的敛散性** - 柯西收敛准则:一个级数如果满足...
通过上述分析,可以看出工作流系统的功能极其丰富,几乎覆盖了所有可能的业务流程需求。这不仅体现了工作流系统的设计深度和广度,也反映了其在现代企业信息化建设中的核心地位。通过合理配置和利用这些功能,企业...
元计算技术人员为大家介绍CFD计算过程发散诸多原因分析
### 蛛网模型在数学分析中的应用 #### 一、蛛网模型概述及其在经济学中的定义 蛛网模型作为一种重要的动态经济模型,在现实生活中有着广泛的应用。它主要用于分析那些生产周期较长的商品市场中价格与产量的变化...
首先,财务分析的作用在于帮助求职者理解公司财务状况,以便在寻找工作时做出明智的选择。此外,随着新行业的发展,例如担保业,财务分析成为识别和评估行业风险的关键技能。分析过程中,思维方式的发散性至关重要,...
这种模块化设计可以提高模型的复用性,便于团队协作,并有助于降低模型的复杂度。 综上所述,这些知识点涉及了Simulink模型的设计、加密、MATLAB编程、自适应滤波算法(特别是FxLMS及其变种)、以及系统模块化的...