和前面的章節(jié)一樣,我們先從一個故事開始,這個故事和晚飯有關(guān)。在我家,周一至周五,老婆做飯,我洗碗。每天做完 飯,老婆會叫我到廚房,說,看,這個盤要洗一下,另外,灶臺臟了,也要擦。如果放在以前,我會說,好,明白了。但是現(xiàn)在,程序員的生活讓我意識到,溝通永 遠不是一件簡單的事情,我說,好,知道了。
等等,這個故事和本章的主題-數(shù) 據(jù)模式有一毛錢的關(guān)系?這只是一個關(guān)于溝通的故事。是的,讓我們稍微映射一下:這里,晚飯這個流程包含了兩個基本的任務(wù),分別是做飯和洗碗,在做飯這個任 務(wù)完成時,任務(wù)的執(zhí)行者(老婆)向下一個任務(wù)的執(zhí)行者(我)傳遞了數(shù)據(jù)(要洗哪些東西),正如語言是人之間的溝通方式一樣,數(shù)據(jù)是IT系統(tǒng)之間的溝通方式,語言之間的溝通總是最有效的,數(shù)據(jù)交互卻未必,因為IT系統(tǒng)里的數(shù)據(jù)交互除了讓計算機理解外重要的是還需要人理解,IT系統(tǒng)是對現(xiàn)實生活的映射,也正因為如此,現(xiàn)在數(shù)據(jù)之間的溝通也在向語言靠攏即語義化(REST/語義網(wǎng))。
好,言歸正傳。
在 前兩章里,我們分別討論了工作流的控制模式和資源模式,控制模式關(guān)注于如何合理調(diào)配業(yè)務(wù)流程里的任務(wù),從而獲得理想的執(zhí)行效率和收益;資源模式則關(guān)注于如 何合理調(diào)配可用的資源來執(zhí)行業(yè)務(wù)流程。本章將介紹工作流系統(tǒng)里的數(shù)據(jù)模式,從數(shù)據(jù)的角度分析工作流系統(tǒng)對數(shù)據(jù)的處理。數(shù)據(jù)模式共計39種,在下面的介紹中,我們將這些模式分為了四部分,分別是數(shù)據(jù)可見性、數(shù)據(jù)交互、數(shù)據(jù)傳輸和基于數(shù)據(jù)的路由。
本章先會概要重復(fù)一下與數(shù)據(jù)模式相關(guān)的一些基本概念,例如流程定義、流程實例、原子任務(wù)、塊任務(wù)等。接下來會對具體的39種數(shù)據(jù)模式進行討論,討論的模式按照應(yīng)用、描述和實現(xiàn)展開,分別對應(yīng)著實際場景對模式的映射、模式的介紹和工作流系統(tǒng)對該模式的實現(xiàn)支持。最后是小結(jié)。
一、基本概念
1、工作流系統(tǒng)里的流程結(jié)構(gòu)
在正式介紹數(shù)據(jù)模式之前,讓我們先簡單回顧一下工作流系統(tǒng)里流程的基本結(jié)構(gòu)。
圖 6-1 工作流系統(tǒng)里的流程結(jié)構(gòu)
流程定義:對業(yè)務(wù)流程的建模和描述,其具有足夠的細節(jié)信息,能夠直接被工作流系統(tǒng)所執(zhí)行。典型的,流程定義由一系列的任務(wù)組成,這些任務(wù)以圖形的形式展現(xiàn)并被連接起來。
流程實例:流程定義的一個執(zhí)行實例被稱為流程實例。一個流程定義可以存在多個同時執(zhí)行的流程實例。這些流程實例互相獨立執(zhí)行。
任務(wù):一個任務(wù)對應(yīng)著流程定義里的一個單一工作單元。存在四種不同類型的任務(wù):原子任務(wù)、塊任務(wù)、多實例任務(wù)和多實例塊任務(wù)。
原子任務(wù)包含簡單且獨立的任務(wù)定義,當(dāng)其初始化時只會產(chǎn)生一個可執(zhí)行的任務(wù)實例。
塊任務(wù)是一系列任務(wù)的組合,典型的,工作流系統(tǒng)里存在的子流程任務(wù)(節(jié)點)即是塊任務(wù),當(dāng)一個塊任務(wù)開始執(zhí)行時,其將流程控制權(quán)傳遞給與之對應(yīng)子流程的第一個任務(wù),當(dāng)子流程完成執(zhí)行后則將控制權(quán)返回給塊任務(wù)。如圖6-1所示,塊任務(wù)C對應(yīng)著一個由任務(wù)X、任務(wù)Y和任務(wù)Z組成的子流程,實際執(zhí)行時,任務(wù)C會觸發(fā)任務(wù)X的執(zhí)行,任務(wù)Z執(zhí)行完畢即子流程執(zhí)行完成后則會觸發(fā)任務(wù)C執(zhí)行完成。
多實例任務(wù)在實際執(zhí)行時會產(chǎn)生多個并行執(zhí)行的任務(wù)實例,這些任務(wù)實例一般互相獨立執(zhí)行。當(dāng)一定數(shù)量的實例執(zhí)行完畢后即會觸發(fā)后續(xù)任務(wù)的執(zhí)行。
多實例塊任務(wù)結(jié)合了塊任務(wù)和多實例任務(wù)的定義,其在實際執(zhí)行時產(chǎn)生多個任務(wù)實例,每個任務(wù)實例對應(yīng)著一個子流程實例。
任務(wù)實例:任務(wù)的一個執(zhí)行實例。
2、數(shù)據(jù)相關(guān)約定
我們使用def var ${變量名}定義數(shù)據(jù)元素,同時def var ${變量名}的聲明位置決定了變量的作用范圍。如圖6-1所示,我們在任務(wù)C上定義了一個名為M的數(shù)據(jù)變量,其的作用范圍為任務(wù)C,任務(wù)級別。
我們使用use(${變量名})表明對變量的使用;使用pass(${變量名})表明數(shù)據(jù)變量的傳遞。在圖6-1里,變量M從任務(wù)C傳遞至任務(wù)E。
對于變量的數(shù)據(jù)類型,典型的有String、integer、float、boolean、date、time等,很多工作流系統(tǒng)使用序列化和反序列化支持存儲任意類型的數(shù)據(jù)類型,如數(shù)組、集合、對象。
3、類比的約定
在后續(xù)對各個模式的介紹里,我會圍繞一個項目團隊的故事進行映射,我們?nèi)绱思s定:
流程定義:我們認(rèn)為所有成熟的軟件公司都會建立起其完整并適用的一套軟件開發(fā)流程,我們將這套流程看作是這里的流程定義。
流程實例:圍繞著軟件開發(fā)流程,我們會使用這套流程來開始我們實際的軟件開發(fā)項目,我們將所有的軟件開發(fā)項目都看作是開發(fā)流程的執(zhí)行實例,即流程實例。
任務(wù):項目開發(fā)過程中的各項任務(wù)。
數(shù)據(jù):我們將團隊成員之間的信息交流看作是數(shù)據(jù)交互。
http://www.aygfsteel.com/ronghao 榮浩原創(chuàng),轉(zhuǎn)載請注明出處:)