流程模型分析(4)
——组合嵌套模型
四、流程组合嵌套模型
一直到现在,所说的模型,都是定位在“任务之间的关系”。不论前面的发散运转模型,还是聚合运转模型,都只是流程内部的任务关系,而不涉及到流程与流程之间的关系。
请参看下图,虽然任务很复杂,但是所有的任务都限定在同一个流程中,而且为了巩固前面的一些运转模型概念,我特意在里面包含了并行,发散,自循环,鉴别聚合,同步聚合等模型。
图(4-1)
让我们再来看看下面的流程,看起来比上面的流程简单,其实不是。仔细的看,其实这里面有两个流程在运行,一个主流程内嵌一个子流程。
图(4-2)
接下来,就来看看流程与流程之间会存在什么样的关系,存在什么可能的模型。
4.1 内嵌模型
内嵌模型刚刚已经提到了,就是在一个主流程中,内嵌了一个或多个子流程。每个子流程自身可能是可独立运转的;也有可能是主流程的辅助性子流程,不可独立运行。
主流程等待方式
请参考下图,在主流程运行到“Router”位置的时候,会激活一个子流程的运行;在子流程运行完后,会重新运行到主流程的“Router”位置,继续主流程的运行。
图(4-3)
在这种方式下,当子流程运行的时候,主流程会暂停,等待子流程的完结。
主流程也运行方式
比较下面的图与4.1.1节的图,就会发现很大的不同。
与“主流程”相同的是,当主流程运行到“Router”位置的时候,会激活一个子流程的运行。但是,激活子流程后,主流程并没有停止,而是基于按照预定的流程方向运行;同时,激活后的子流程也同样处于软转状态。
说到这里,估计很多让都会询问,那么子流程的信息什么时候返回呢?虽然在下图中,表示为子流程的信息返回到主流程的“任务A3”。但是,依然涉及到很多问题,比如:什么时候聚合,怎么聚合的问题了;而且主流程和子流程的运行时间未必搭配恰当,有可能存在主流程首先运行到Task A3点,而这时候子流程还没有运行结束情况,反之亦然。
这种情况,大多数采用“同步聚合”的方式:如果有一方未到达的情况下,另一方会等待。当然,这其中可能涉及到等待超时等不良因素,这时候主流程时选择继续等待,还是发催办消息,还是继续运行,就是工作流引擎的设计问题了。
图(4-4)
4.2 外嵌模型
与内嵌模型不同的地方,就是外嵌的子流程,不返回主流程。在主流程激活子流程后,主流程继续运行,且不关心子流程的运行状态或运行结果。
参考下图,你会发现其与内嵌模型中的“主流程也运行方式”非常的相似,区别就是,子流程最终没有返回到主流程。
图(4-5)
---------------------------
作者:胡长城 (银狐999 , james999)
Email:james-fly@vip.sina.com