版權聲明:工作流模式版權歸 Workflow Patterns 組 織 ( http://www.workflowpatterns.com ) 所 有 。 經 Workflow Patterns授權,中文簡體版由辛鵬和榮浩翻譯。未經譯者書面許可,不得將該中文簡體版用於商業目的。
數據傳遞模式共有7種,討論數據在工作流系統各組件以及外部環境之間的傳遞方式。
- 通過傳值傳入數據:當流程組件之間不共享一個通用的數據存儲倉庫時,我們通過傳值傳入數據。
- 通過傳值傳出數據:當流程組件之間不共享一個通用的數據存儲倉庫時,我們通過傳值傳出數據。
- 複製傳入/傳回數據:爲了使流程組件能夠各自獨立的使用數據,我們通過複製傳入/傳回數據傳遞數據。
- 通過傳引用傳遞數據——不加鎖:當流程組件共享一個通用的數據存儲倉庫時,我們通過傳引用直接使用數據。
- 通過傳引用傳遞數據——加鎖:當通過傳引用傳遞數據時,我們通過加鎖來避免併發的讀寫衝突。
- 轉換傳入數據:當傳遞的數據與目標數據類型不一致時,我們應用數據轉換函數對傳入數據進行轉換。
- 轉換傳出數據:當傳遞的數據與目標數據類型不一致時,我們應用數據轉換函數對傳出數據進行轉換。
圖C-45 工作流數據傳遞模式
通過傳值傳入數據(WDP_27: Data Transfer by Value - Incoming)
描述
流程組件能夠通過傳值接受傳入數據。
圖C-46 通過傳值傳遞數據
應用
在流程組件不共享一個通用的數據存儲倉庫時傳遞數據。
通過傳值傳出數據(WDP_28: Data Transfer by Value - Outgoing)
描述
流程組件能夠通過傳值傳出數據,如圖C-46所示。
複製傳入/傳回數據(WDP_29: Data Transfer – Copy In/Copy Out)
描述
流程組件能夠在開始執行時從外部資源(包括工作流系統內部的數據,也包括外部環境的數 據)複製數據,並在執行結束時將數據傳回。
圖C-47 複製傳入、傳回數據
應用
父子流程實例之間的數據傳遞以及給多實例活動傳遞數據。
通過傳引用傳遞數據——不加鎖(WDP_30: Data Transfer by Reference - Unlocked)
描述
流程組件之間能夠通過傳遞數據的引用實現數據傳遞,該數據處於這些流程組件都能訪問的 位置。對數據沒有併發讀寫控制。
應用
圖C-48 通過傳引用傳遞數據
當流程組件共享一個通用的數據存儲倉庫時,不顯式的傳遞數據。
該模式是應用最爲廣泛的數據傳遞模式,因爲它足夠簡單。如圖C-49所示,通過唯一的變量 名直接使用數據。
圖C-49 通過唯一變量名直接使用數據
該模式最大的問題正如它的名字:不加鎖。因爲數據沒有併發的讀寫控制,所以如果存在多個執行中的活動實例同時修改同一數據或者讀寫同時發生時,就會產生衝突。
通過傳引用傳遞數據——加鎖(WDP_31: Data Transfer by Reference – With Lock)
描述
流程組件之間能夠通過傳遞數據的引用實現數據傳遞,該數據處於這些流程組件都能訪問的 位置。爲了避免讀寫衝突,通過讀寫鎖對這些數據進行併發讀寫控制。
應用
當通過傳引用傳遞數據時,避免併發的數據讀寫衝突。活動實例在使用數據時,我們對變量進行加鎖。如果是隻讀,我們加讀鎖;如果是寫,我們 加寫鎖。我們在進行活動定義時在活動節點上聲明活動對該變量是隻讀還是寫。
圖C-50 使用寫鎖控制活動的觸發
圖C-51 使用讀鎖控制活動的觸發
轉換傳入數據(WDP_32: Data Transformation - Input)
描述
在將數據傳遞給流程組件前能夠應用轉換函數對數據進行轉換。
圖C-52 轉換傳入數據
應用
當傳遞的數據與目標數據類型不一致時,對數據進行轉換。
轉換傳出數據(WDP_33: Data Transformation - Output) 描述
在將數據從流程組件傳出前能夠應用轉換函數對數據進行轉換。
圖C-53 轉換傳出數據
應用
當傳遞的數據與目標數據類型不一致時,對數據進行轉換。