跳至內容

英文维基 | 中文维基 | 日文维基 | 草榴社区

工作流模式

維基百科,自由的百科全書

工作流模式是由W.M.P. van der AalstA.H.M. ter Hofstede、Bartosz Kiepuszewski、A. P. Barros等人於2000年提出的一個概念。他們一共總結了21種工作流模式。

簡介

[編輯]

1. 順序(Sequence) 工作流中的各個活動在同一個進程中按順序依次執行。 例子:在「發送貨物」之後「發送單據」。

2. 平行拆分(Parallel Split) 工作流中從一個執行緒中的一個點拆分為在多個執行緒中平行執行的多個活動。 例子:活動「付款」激活了「發送貨物」以及「通知顧客」的執行。

3. 同步(Synchronization) 工作流中的多個活動在一個點上匯合成一個執行緒。 例子:活動「歸檔」在「發票」和「收款」全部完成後被激活。

4. 排他選擇(Exclusive Choice) 工作流中的一個點,基於決定或者工作流中的數據,流向若干個分支中的一個。

5. 單合併(Single Merge) 工作流程中的一個點在兩個或者多個分支發生非同步的匯合時執行。它假設這些分支中不存在平行執行的情況。 例子:在收到支付或者確認信用之後,汽車被交付給顧客。

6. 多選(Multi-choice) 工作流中的一個點,基於決定或者工作流中的數據,流向若干個分支中的幾個。

7. 平行合併(Synchronize Merge) 工作流程中的多個路徑在一個點被匯合成一個單一的進程。如果多於一個的路逕到達了,活動執行緒就需要進行同步。如果只有一個路逕到達,那麼其它的路徑應該非同步的重新會聚。該模式假設在一個分支被激活後,不會在等待其它分支完成的過程中再次被激活。 這種模式的難點在於決定在哪些分支到達後啟動活動。

8. 多合併(Multi-merge) 工作流程中的多個分支在一個點進行非同步的匯聚。如果多於一個的分支被激活——可能是並發的——每個進入分支的每個活動都在合併之後啟動新的活動。

9. 鑑別器(Discriminator) 鑑別器是工作流中的一個點,它等待進入分支中的一個完成,然後才激活其後的活動序列。從那個時刻開始,它等待所有剩餘的分支完成,並且「忽略」它們。一旦所有的分支都已被觸發,它就會重置自己,以便能被再次觸發。 例子:在三個分支中的任意兩個到達之後啟動後面的活動。

10. M中的N模式(N-out-of-M Join) 合併多條路徑,進行部分同步,只執行一次後續活動

11. 強制循環(Arbitrary Cycles) 工作流中的一個點可以讓一個或多個活動反覆的執行。

12. 隱式終止(Implicit Termination) 一個子過程應該在沒有什麼事情可做的時候被停下來。換句話說,在工作流中沒有別的活動在執行並且沒有活動可被激活的時候終止。

13. 非同步的多實例(Multiple Instances Without Synchronization) 在一個工作流的內部中,可以創建一個活動的多個實例,當然,這需要對新產生的執行緒的控制能力。

14. 在設計期間預先確定的多實例(Multiple Instances With a Priori Design Time Knowledge) 在特定過程中的特定活動的數量是在設計時就被確定的。一旦所有的實例都完成了,其它的活動應該被啟動。 例子:有關危險品的請求需要三個不同的審核。

15. 在運行期預先確定的多實例(Multiple Instances With a Priori Runtime Knowledge) 在一個活動能夠被多次激活的這種情況下,在指定情況下的指定活動的實例數量可能取決於情況的特性或者資源的可用性。但是,在活動被創建之前,在運行中的某個階段,這個數量是可以預知的。一旦所有的實例都完成了,其它的活動應該被啟動。 例子:在預定旅行的過程中,如果旅途包含多個飛行的話,活動「預定機票」會被多次執行。如果所有預定都完成了,發票會被發送給客戶。

16. 無法在運行期預先確定的多實例(Multiple Instances With no Priori Runtime Knowledge) 在一個活動能夠被多次激活的這種情況下,在指定情況下的指定活動的實例數量無論是在設計時或者運行時都不能在活動的實例被創建之前預先確定。但是,在活動被創建之前,在運行中的某個階段,這個數量是可以預知的。一旦所有的實例都完成了,其它的活動應該被啟動。這個模式和模式14的區別在於,在某些實例運行結束之後,新的實例仍能被創建。

17. 延遲選擇(Deferred Choice) 工作流中的一個點,有一個或多個分支已經被選擇。與XOR拆分相比,並沒有明確的選擇,但是,選擇是取決於環境的。與AND拆分相比,兩者中只有一個被執行。這意味著一旦環境啟動了其中的一個,另一個就被取消。要注意,選擇是被延遲到兩個分支中的一個真正開始執行時,也就是說,選擇是可以儘可能的推後的。 例子:在收到貨物之後,有兩種方法可以將其送到。選擇取決於相關資源的可用性。因此,選擇會被推遲到直到其中一個資源可用為止。

18. 交替平行路由(Interleaved Parallel Routing) 一組活動以任意的順序執行,每個活動都被執行,他們的順序是在運行時決定的,並且在任意一個時刻都不會有兩個活動在執行。

19. 里程碑(Milestone) 一個活動能否執行取決於一個指定的狀態。也就是說,只有在到達一個特定的未過期的里程碑時,活動才被執行。 例子:一個顧客只有在進行六個月以上的飛行之後才能聲明自己的飛行里程。

20. 取消活動(Cancel Activity) 一個可執行的活動被強制失效了,也就是說,一個正在等待執行的活動所在執行緒被移除了。 例子:如果顧客取消了一個請求,那麼與之相關的活動也被取消了。

21. 取消實例(Cancel Case) 一個活動的實例被完全消除了。

外部連結

[編輯]