WF中如何選擇工作流的類型
轉載自http://www.agilelabs.cn/blogs/linkin/archive/2005/11/30/225.aspx
今天看了一篇關于WWF的BLOG,記錄一下學習心得,原文參見:http://blogs.msdn.com/davegreen/archive/2005/10/20/483309.aspx
在WWF中有兩種類型的工作流,序列工作流和狀態機工作流,和我一樣,許多剛接觸WWF的人可能比較迷惑,什么時候該選擇序列工作流,而什么時候又該選擇狀態機工作流呢?
序列工作流是最容易讓人理解的一種工作流概念,比如掛號->看病->繳費->取藥這個流程是一個非常典型的序列工作流,用Sequential工作流模型可以很容易的為這種情景建模。
但是,現實中還有一些流程可能不會這么簡單,考慮一個缺陷管理系統,當測試人員發現了一個BUG,新建一個缺陷,然后將它分配給某開發人員,然后他解決了改BUG,然后返回給測試人員進行回歸測試,測試人員確認該BUG被解決后,關閉該缺陷。該情景看起來和掛號看病的流程很類似。但是,現實情景很可能是這樣的,測試人員發現了BUG,將它分配給開發人員Bill,而Bill在看了該Bug后說:這不是我的問題,這是Clive的。然后將該Bug重新分配給了Clive。或者Bill說,是測試人員弄錯了,這根本就不是一個Bug。然后拒絕了該Bug。或者Bill請測試人員提供更詳細的信息。或者,Bill今天心情很好,處理了該Bug。或者原始的測試人員出去了,被另外一個測試人員接手該Bug的回歸。或者該測試人員失誤打開了一個不應該被打開的缺陷等等。每一個參與者都有可能在一堆選擇中做出一個跳到任意一個其它的步驟。請問如何設計該序列工作流?
面對這樣的問題,使用狀態機工作流就會是一個更好的選擇。可以將Bug的每個狀態設置為一個環節(Stage),工作流的行為就是在各個狀態之間進行轉換。你可以非常容易的使用State Machine Workflow來為這個流程建模。
那么,什么情況下使用何種類型的工作流有沒有一個簡單的評判依據呢?
Cave給出了一個簡單的判斷標準:影響工作流程的一些重要的選擇是否發生在工作流外部(out of workflow)?是否由用戶進行控制?假如是,那么采用序列工作流的概念來建模將是一件非常讓人頭疼的工作。而狀態機工作流則比較期望工作流的狀態選擇發生在工作流的外部。
那么為什么狀態機工作流會更加適合這種情況?根本原因在于序列工作流在本質上是對工作流的路徑建模,將路徑信息都編碼到了模型之中。但是在某些時候,我們并不關心工作流的路徑,我們只關心當前的工作流狀態,并且有哪些可能的選擇會跳轉到某個另外的狀態。假如一定要用序列工作流來描述這種情形,那么會畫出許多復雜的路徑流程,但是這些復雜的路徑卻并非我們所關注的問題域。造成了開發成本的浪費。
浙公網安備 33010602011771號