流程模型分析(4)

四、流程組合嵌套模型

一直到現在,所說的模型,都是定位在“任務之間的關係”。不論前面的發散運轉模型,還是聚合運轉模型,都只是流程內部的任務關係,而不涉及到流程與流程之間的關係。

請參看下圖,雖然任務很複雜,但是所有的任務都限定在同一個流程中,而且爲了鞏固前面的一些運轉模型概念,我特意在裏面包含了並行,發散,自循環,鑑別聚合,同步聚合等模型。

圖(4-1

 

讓我們再來看看下面的流程,看起來比上面的流程簡單,其實不是。仔細的看,其實這裏面有兩個流程在運行,一個主流程內嵌一個子流程。

圖(4-2

 

       接下來,就來看看流程與流程之間會存在什麼樣的關係,存在什麼可能的模型。

 

 

4.1 內嵌模型

內嵌模型剛剛已經提到了,就是在一個主流程中,內嵌了一個或多個子流程。每個子流程自身可能是可獨立運轉的;也有可能是主流程的輔助性子流程,不可獨立運行。

 

主流程等待方式

請參考下圖,在主流程運行到“Router”位置的時候,會激活一個子流程的運行;在子流程運行完後,會重新運行到主流程的“Router”位置,繼續主流程的運行。

 

圖(4-3

 

       在這種方式下,當子流程運行的時候,主流程會暫停,等待子流程的完結。

 

主流程也運行方式

比較下面的圖與4.1.1節的圖,就會發現很大的不同。

與“主流程”相同的是,當主流程運行到“Router”位置的時候,會激活一個子流程的運行。但是,激活子流程後,主流程並沒有停止,而是基於按照預定的流程方向運行;同時,激活後的子流程也同樣處於軟轉狀態。

說到這裏,估計很多讓都會詢問,那麼子流程的信息什麼時候返回呢?雖然在下圖中,表示爲子流程的信息返回到主流程的“任務A3”。但是,依然涉及到很多問題,比如:什麼時候聚合,怎麼聚合的問題了;而且主流程和子流程的運行時間未必搭配恰當,有可能存在主流程首先運行到Task A3點,而這時候子流程還沒有運行結束情況,反之亦然。

這種情況,大多數採用“同步聚合”的方式:如果有一方未到達的情況下,另一方會等待。當然,這其中可能涉及到等待超時等不良因素,這時候主流程時選擇繼續等待,還是發催辦消息,還是繼續運行,就是工作流引擎的設計問題了。

圖(4-4

 

 

4.2 外嵌模型

與內嵌模型不同的地方,就是外嵌的子流程,不返回主流程。在主流程激活子流程後,主流程繼續運行,且不關心子流程的運行狀態或運行結果。

       參考下圖,你會發現其與內嵌模型中的“主流程也運行方式”非常的相似,區別就是,子流程最終沒有返回到主流程。

 

圖(4-5

發佈了14 篇原創文章 · 獲贊 2 · 訪問量 7萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章