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