五、折回模式
實(shí)際工作中,工作的執(zhí)行狀態(tài)不可能總是與預(yù)想相符的,總會(huì)出現(xiàn)各種各樣的情況,例如原本分配給員工甲的任務(wù)由于甲要請(qǐng)假不得不重新分配,由于新的緊急任務(wù)員工乙當(dāng)前的工作需要掛起一段時(shí)間等等。折回模式則剛好對(duì)應(yīng)著這些情況,折回代表著工作項(xiàng)狀態(tài)的反復(fù)、回退。
圖 5-33
如圖5-33所示,折回模式對(duì)應(yīng)著紅線標(biāo)識(shí)著的工作項(xiàng)的狀態(tài)變遷。這些狀態(tài)變遷對(duì)應(yīng)著以下情況:
委派:資源將先前指派給他的工作項(xiàng)委派給他人執(zhí)行。
系統(tǒng)重新分配:系統(tǒng)將沒有完成的工作項(xiàng)重新提供或指派給其他資源執(zhí)行。
退回指派:資源撤銷指派給他的工作項(xiàng),工作項(xiàng)可以重新指派給其他資源。
工作移交:資源將其已經(jīng)開始執(zhí)行的工作項(xiàng)移交給他人執(zhí)行。
掛起/恢復(fù)執(zhí)行:資源臨時(shí)掛起當(dāng)前執(zhí)行的工作項(xiàng),并在某一個(gè)時(shí)候重新恢復(fù)執(zhí)行該工作項(xiàng)。
跳過:資源選擇跳過指派給他的工作項(xiàng)的執(zhí)行,不執(zhí)行該工作項(xiàng)。
重做:資源重新執(zhí)行先前已經(jīng)完成的工作項(xiàng)。
提前執(zhí)行:資源在流程實(shí)際觸發(fā)該工作前已經(jīng)開始執(zhí)行該工作。
折回模式共有9種。
1、委派(WRP_27: Delegation)
描述
資源能夠?qū)⑾惹爸概山o他的工作項(xiàng)指派給另外的資源執(zhí)行。
圖 5-34
如圖5-34所示,委派對(duì)應(yīng)于紅線標(biāo)識(shí)著的工作項(xiàng)狀態(tài)變遷。
應(yīng)用
委派在平常工作中非常常見,例如員工甲將要請(qǐng)假,他將他要完成的工作委派給同事乙執(zhí)行;在協(xié)同辦公里,領(lǐng)導(dǎo)將相關(guān)工作委派給下屬執(zhí)行等等。
實(shí)現(xiàn)
實(shí)際應(yīng)用中,委派按照粒度分為了兩種:一種 是工作項(xiàng)的委派,這是一種細(xì)粒度的委派,指單一任務(wù)實(shí)例的委派,與某一特定的任務(wù)實(shí)例關(guān)聯(lián);另一種是業(yè)務(wù)的委派,這是一種粗粒度的委派,例如,員工甲將其 負(fù)責(zé)的某類業(yè)務(wù)的工作全部委派給員工乙,這意味著屬于這類業(yè)務(wù)的所有工作都將由員工乙執(zhí)行。業(yè)務(wù)的委派通常與權(quán)限緊密關(guān)聯(lián),實(shí)際實(shí)現(xiàn)時(shí)為避免用戶權(quán)限的混 淆,一般采取分開登錄系統(tǒng)的方式進(jìn)行實(shí)現(xiàn),即員工乙如果想處理員工甲委派給其的工作,則需要用員工甲的賬號(hào)和其給定的密碼重新登錄系統(tǒng),并注銷掉自己賬號(hào) 的使用。
需要注意的一點(diǎn)是:委派意味著原先指派的資源還必須對(duì)該工作負(fù)責(zé),例如員工甲將某項(xiàng)工作委派給員工乙執(zhí)行,盡管員工乙實(shí)際執(zhí)行了該工作,但該工作仍然必須由員工甲負(fù)責(zé)。所以在實(shí)現(xiàn)中,員工甲必須能夠保持對(duì)委派工作項(xiàng)的追蹤和控制。
2、系統(tǒng)重新分配(WRP_28: Escalation)
描述
系統(tǒng)能夠重新分配已經(jīng)分配的工作項(xiàng),以加快工作項(xiàng)的執(zhí)行。
圖 5-35
如圖5-35所示,工作項(xiàng)原先提供或指派給了一個(gè)或多個(gè)資源執(zhí)行,現(xiàn)在由于各種原因,需要優(yōu)化該工作項(xiàng)的執(zhí)行,所以將該工作項(xiàng)收回重新分配,提供或指派給其他的資源。
應(yīng)用
工作分配的優(yōu)化。很多時(shí)候,計(jì)劃跟不上變 化,工作也是這樣,分配工作前有許多的考慮因素,例如個(gè)人能力、工作經(jīng)驗(yàn)、技能要求等等,但在實(shí)際工作中往往會(huì)發(fā)現(xiàn)原先的人力分配并不合理,或者有些人承 擔(dān)了太多的職責(zé),或者有人能力超出其目前擔(dān)承的職責(zé)等等(在敏捷軟件開發(fā)里,我們通過頻繁的交換結(jié)對(duì)編程以達(dá)到部分的平衡),在這種時(shí)候就需要對(duì)工作進(jìn)行 靈活的重新分配以到達(dá)最高的執(zhí)行效率。
實(shí)現(xiàn)
實(shí)際實(shí)現(xiàn)中非常受限,對(duì)流程的優(yōu)化始終是一 個(gè)對(duì)人的命題,而不是對(duì)機(jī)器對(duì)工具的命題,工具所能做到的只是盡可能多的提供可供參考的數(shù)據(jù)模型,例如各種報(bào)表、數(shù)據(jù)分析等等,最后做出決策的還是人。所 以該模式的實(shí)現(xiàn)也以提供給流程管理員重新分配工作項(xiàng)的能力為主,同時(shí)提供工作項(xiàng)超時(shí)的提示為輔。
3、退回指派(WRP_29: Deallocation)
描述
資源撤銷指派給他的工作項(xiàng),工作項(xiàng)可以重新分配給其他資源。
圖 5-36
如圖5-36所示,資源能夠退回原先指派給他的工作項(xiàng),該工作項(xiàng)可以交由系統(tǒng)重新分配給其他資源。
應(yīng)用
同樣是工作分配的優(yōu)化,只不過該模式由資源驅(qū)動(dòng)。
實(shí)際工作中,由于各種原因,例如經(jīng)驗(yàn)不足、當(dāng)前承擔(dān)職責(zé)過多等等,發(fā)現(xiàn)自己并不能很好完成當(dāng)前的任務(wù)時(shí),可以提出不執(zhí)行該任務(wù)。
實(shí)現(xiàn)
實(shí)現(xiàn)的難點(diǎn)在于資源退回工作項(xiàng)后的重新分配,即如何重新分配該工作項(xiàng)。
與提供給多個(gè)資源模式對(duì)應(yīng),該模式的最簡(jiǎn)單支持是退回重新提供給多個(gè)資源。例如工作項(xiàng)分配給開發(fā)人員這一角色執(zhí)行,開發(fā)人員甲拾取了該工作項(xiàng)(故事卡),經(jīng)過一番痛苦和彷徨,最終將該工作項(xiàng)退回,這樣所有開發(fā)人員又都能拾取該工作項(xiàng)。
4、有狀態(tài)工作移交(WRP_30: Stateful Reallocation)
描述
資源將正在執(zhí)行的工作項(xiàng)移交給其他資源執(zhí)行,該工作的狀態(tài)將得到保存。
圖 5-37
如圖5-37所示,資源將已開始執(zhí)行的工作移交給其他資源執(zhí)行。該模式與委派模式很相似,差別就在于委派模式是將未開始執(zhí)行的工作進(jìn)行重新指派執(zhí)行,而該模式則是將已開始執(zhí)行的工作進(jìn)行重新指派執(zhí)行。委派模式中的委派者仍需要為委派出去的工作負(fù)責(zé),而移交則同時(shí)意味著責(zé)任的移交。
應(yīng)用
工作移交非常常見,最常見的原因包括位置調(diào)動(dòng)、離職、休假等等。
實(shí)現(xiàn)
在大多數(shù)的工作流系統(tǒng)實(shí)現(xiàn)里,業(yè)務(wù)數(shù)據(jù)與流程數(shù)據(jù)是相互隔離的,僅僅通過某一字段進(jìn)行關(guān)聯(lián)(例如業(yè)務(wù)主鍵),流程的目標(biāo)是攜帶業(yè)務(wù)數(shù)據(jù)進(jìn)行流轉(zhuǎn)。在這種情況下,該模式的實(shí)現(xiàn)變成了默認(rèn)實(shí)現(xiàn),系統(tǒng)不需要做任何回退或清理操作,直接做工作項(xiàng)的轉(zhuǎn)發(fā)即可。
5、無狀態(tài)工作移交(WRP_31: Stateless Reallocation)
描述
資源將正在執(zhí)行的工作項(xiàng)移交給其他資源執(zhí)行,該工作的狀態(tài)不會(huì)得到保存。
與有狀態(tài)工作移交對(duì)應(yīng)。
應(yīng)用
工作的無狀態(tài)移交通常意味著工作的重新執(zhí)行,并且原有的工作對(duì)重啟的工作而言沒有太大的價(jià)值。
實(shí)現(xiàn)
與有狀態(tài)工作移交相比,該模式需要處理相應(yīng)業(yè)務(wù)數(shù)據(jù)的回退或清理。直接支持該模式比較困難,需要在實(shí)施時(shí)根據(jù)情況對(duì)該任務(wù)節(jié)點(diǎn)操作業(yè)務(wù)數(shù)據(jù)的權(quán)限進(jìn)行限定,并在限定的基礎(chǔ)上進(jìn)行記錄和回退。
6、掛起/恢復(fù)執(zhí)行(WRP_32: Suspension/Resumption)
描述
資源能夠掛起當(dāng)前執(zhí)行的工作項(xiàng),并在某一個(gè)時(shí)候重新恢復(fù)執(zhí)行該工作項(xiàng)。
圖 5-38
應(yīng)用
資源對(duì)分配給其的工作進(jìn)行優(yōu)化執(zhí)行,能夠根據(jù)自己和當(dāng)前的實(shí)際情況合理的安排工作執(zhí)行,掛起正在執(zhí)行的工作,執(zhí)行當(dāng)前最重要或效率最高的工作,然后再返回執(zhí)行該工作。
實(shí)現(xiàn)
基本的狀態(tài)變遷。
7、跳過(WRP_33: Skip)
描述
資源能夠選擇跳過指派給他的工作項(xiàng)的執(zhí)行,不執(zhí)行該工作項(xiàng),并將該工作項(xiàng)標(biāo)識(shí)為完成。
圖 5-39
應(yīng)用
實(shí)際工作中,對(duì)于非關(guān)鍵工作,可以選擇跳過,以便進(jìn)行后續(xù)更為緊急或重要的工作。
實(shí)現(xiàn)
對(duì)于實(shí)現(xiàn)工作項(xiàng)本身的狀態(tài)變遷來說,支持該模式非常簡(jiǎn)單,問題在于業(yè)務(wù)數(shù)據(jù)的依賴關(guān)系,如果后續(xù)工作的處理依賴于該節(jié)點(diǎn)處理后的業(yè)務(wù)數(shù)據(jù),那么簡(jiǎn)單的選擇跳過該工作項(xiàng)的執(zhí)行就會(huì)產(chǎn)生問題。所以一個(gè)好的做法是給一些關(guān)鍵任務(wù)節(jié)點(diǎn)加上約束,不允許執(zhí)行跳過操作。
8、重做(WRP_34: Redo)
描述
資源能夠?qū)ο惹巴瓿傻墓ぷ黜?xiàng)重新處理,同時(shí),該工作的后續(xù)工作項(xiàng)(后續(xù)任務(wù)所對(duì)應(yīng)的工作項(xiàng))也將被重新處理。
圖 5-40
應(yīng)用
對(duì)已完成的工作進(jìn)行重新處理并不少見,但該 模式最為重要的部分還是在于要求所有后續(xù)工作的重新處理。所以該模式一般應(yīng)用在極其重要的關(guān)鍵任務(wù)節(jié)點(diǎn),例如非常重要的決策節(jié)點(diǎn),因?yàn)楹罄m(xù)的任務(wù)嚴(yán)重依賴 于該節(jié)點(diǎn)所作出的決策(所產(chǎn)生的數(shù)據(jù)),一旦決策發(fā)生變化,那么相應(yīng)的后續(xù)工作必須都要做出變化。這也是業(yè)務(wù)敏捷性的一種反映。同時(shí)需要注意,該模式也是 一種代價(jià)高昂的應(yīng)用,因?yàn)檫@往往意味著該業(yè)務(wù)流程實(shí)例中的很多工作都需要重新處理,所以如何在業(yè)務(wù)處理中盡早發(fā)現(xiàn)可能的環(huán)境變化并及時(shí)作出決策的調(diào)整并避 免成本高昂的返工才是最為重要的一點(diǎn)。
現(xiàn)在的軟件開發(fā)越來越強(qiáng)調(diào)于擁抱變化,強(qiáng)調(diào) 代碼的重構(gòu)和演進(jìn),盡管如此,如果軟件的基礎(chǔ)架構(gòu)需要根據(jù)當(dāng)前業(yè)務(wù)變化發(fā)生重大變更,那么這依舊是一件成本高昂的事情,因?yàn)橐坏┗A(chǔ)架構(gòu)發(fā)生變化,那么很 多模塊實(shí)現(xiàn)將不得不重新編寫代碼。所以盡管越來越多的開發(fā)團(tuán)隊(duì)開始引入敏捷的開發(fā)方法,但是經(jīng)驗(yàn)豐富的開發(fā)人員才是整個(gè)敏捷團(tuán)隊(duì)的基石(敏捷開發(fā)非常重視 人)。
實(shí)現(xiàn)
從該模式里能夠看到資源模式與控制模式的結(jié)合,工作項(xiàng)的重做需要后續(xù)任務(wù)的重新執(zhí)行,這需要取消當(dāng)前的執(zhí)行任務(wù),并將流程實(shí)例的控制點(diǎn)重新返回至該工作項(xiàng)所對(duì)應(yīng)的任務(wù)。這涉及到兩種控制模式,分別是:取消任務(wù)模式和任意循環(huán)模式(具體可以參考第四章的說明)。
9、提前執(zhí)行(WRP_35: Pre-Do)
描述
在工作項(xiàng)實(shí)際提供或指派給資源執(zhí)行之前,資源已經(jīng)可以執(zhí)行該工作項(xiàng)。
圖 5-41
如圖5-41所示,任務(wù)A還在執(zhí)行,任務(wù)B還未激活,但此時(shí)員工甲已經(jīng)可以開始執(zhí)行任務(wù)B的工作項(xiàng)。該模式的實(shí)現(xiàn)需要一個(gè)前提條件:任務(wù)B不能依賴于任務(wù)A的執(zhí)行結(jié)果,即不能依賴于前續(xù)任務(wù)的處理輸出。
可以看出,該模式與前面推模式里的提前分配模式非常相似,所不同的是:提前分配強(qiáng)調(diào)一種通知機(jī)制,強(qiáng)調(diào)預(yù)先準(zhǔn)備;而提前執(zhí)行則已經(jīng)可以開始實(shí)際的執(zhí)行工作。
應(yīng)用
和提前分配模式不同,該模式實(shí)際提供了一種 流程任務(wù)執(zhí)行的靈活機(jī)制,在預(yù)先定義的業(yè)務(wù)流程里,任務(wù)的執(zhí)行是具有一定順序的,可能在大多數(shù)情況下,這種順序是合理的,但是在某些具體的流程實(shí)例里,某 些串行執(zhí)行的任務(wù)節(jié)點(diǎn)可以并行的執(zhí)行以達(dá)到最好的執(zhí)行效率和負(fù)載均衡,在這種情況下,就可以應(yīng)用該模式并行執(zhí)行部分任務(wù)。
需要注意的是,該模式僅僅引入了一種實(shí)際執(zhí)行任務(wù)的靈活性,是對(duì)業(yè)務(wù)流程定義固化的補(bǔ)償,如果在一個(gè)業(yè)務(wù)流程中頻繁應(yīng)用到該模式,則往往意味著流程定義本身需要作出調(diào)整。
http://www.aygfsteel.com/ronghao 榮浩原創(chuàng),轉(zhuǎn)載請(qǐng)注明出處:)