工作流模式
1編程模型
從消化系統(tǒng)講起,口腔、腸道、胃…等消化器官組成了消化系統(tǒng),每個(gè)器官又是由更微觀的物質(zhì)構(gòu)成,比如細(xì)胞。細(xì)胞又可以細(xì)分。細(xì)胞可以分類,白細(xì)胞,紅細(xì)胞等等。這里細(xì)胞可以認(rèn)為是消化系統(tǒng)的基本組成元素。這種組成結(jié)構(gòu)非常像面向?qū)ο蟮乃季S,因?yàn)樗鼈兌家鉀Q同一個(gè)問題:現(xiàn)實(shí)世界復(fù)雜性。類可以認(rèn)為是最基本的組成元素,類可以組成組件(構(gòu)件),構(gòu)件組成服務(wù)。知道了消化系統(tǒng)的組成,我們來看如何實(shí)現(xiàn)吃這個(gè)功能,吃的功能完成需要食物通過各種消化器官,使用消化器官的功能完成。這個(gè)過程是面向過程的,是一個(gè)流程。再看我們程序的實(shí)現(xiàn),Staitc Main是程序的入口,C#中功能的實(shí)現(xiàn)也是通過調(diào)用相互關(guān)聯(lián)的類中的方法實(shí)現(xiàn)的。C#本身就提供了豐富的控制結(jié)構(gòu)(if else,while等等)。
分析:從最簡(jiǎn)單的語句到類到組件,到子系統(tǒng)。代碼結(jié)構(gòu)的最優(yōu)化組織方式采用面向?qū)ο?#xff0c;可以更好復(fù)用,使用設(shè)計(jì)模式后可以更好控制變化。但是運(yùn)行時(shí)邏輯往往是面向過程的。比如Main{}中的邏輯。就象細(xì)胞構(gòu)成嘴、腸胃,這些器官又構(gòu)成了消化系統(tǒng),但是吃飯這個(gè)功能的完成是利用各個(gè)器官的功能,按照某種控制流程完成的。
結(jié)論:程序的目標(biāo)之一是功能實(shí)現(xiàn),其中實(shí)現(xiàn)方式是基于過程的,組織結(jié)構(gòu)是面向?qū)ο蟮摹?/p>
1.1過程控制模型
常見的過程控制模型有:1、C#語句控制流;2、XAML;3、數(shù)據(jù)庫表;4、DSL(領(lǐng)域描述語言),圖形(專用的圖形工具)。數(shù)據(jù)庫表中可以存儲(chǔ)過程的調(diào)度邏輯,領(lǐng)域模式語言這幾年也非常流行。過程的描述可以用任何一種方法實(shí)現(xiàn)。
1.2C#控制流程的問題
看一看交互式過程:在流轉(zhuǎn)的過程中需要外部消息的響應(yīng)的過程。可能某個(gè)處理會(huì)等待幾天甚至幾周。如果使用C#控制流實(shí)現(xiàn),應(yīng)該怎么實(shí)現(xiàn)。一般的做法是新建一個(gè)線程異布執(zhí)行某個(gè)流程,而主線程持續(xù)運(yùn)行(類似Windows服務(wù)),如果流程停滯,線程會(huì)被阻塞,如果阻塞的線程一多,整個(gè)系統(tǒng)的性能就會(huì)有很大影響,畢竟線程池等系統(tǒng)資源有限。這種設(shè)計(jì)可以實(shí)現(xiàn),但是可擴(kuò)展性和可伸縮性都存在問題。Wf處理這類問題的思路是書簽機(jī)制,在線程停滯的地方加上書簽,并且書簽可以持久化保存到介質(zhì)上,節(jié)約CLR中內(nèi)存資源。管理器接收到消息后會(huì)繼續(xù)流程的運(yùn)轉(zhuǎn)。書簽可以結(jié)合Observe模式和Delegate實(shí)現(xiàn)。第二講中我們可以進(jìn)一步的了解到,wf的線程模型是天然的異步調(diào)用機(jī)制,可以非常好的解決這類情況。而工作流本身對(duì)過程模型的支持也強(qiáng)于目前的高級(jí)語言,下面的參考部分常見的工作流模式。
1.3工作流模式
工作流的概念起源于生產(chǎn)組織和辦公自動(dòng)化領(lǐng)域,提出的目的是通過將工作分解成定義良好的任務(wù)、角色,按照一定的規(guī)則和過程來執(zhí)行這些任務(wù)并對(duì)它們進(jìn)行監(jiān)控,達(dá)到提高工作效率、降低生產(chǎn)成本、提高企業(yè)生產(chǎn)經(jīng)營(yíng)管理水平和企業(yè)競(jìng)爭(zhēng)力的目標(biāo)。工作流從更高的層次上提供了實(shí)現(xiàn)物料流、資金流、信息流及其涉及的相關(guān)過程與應(yīng)用的集成機(jī)制,從而使得企業(yè)能夠?qū)崿F(xiàn)業(yè)務(wù)過程集成、業(yè)務(wù)過程自動(dòng)化與業(yè)務(wù)過程的管理。通過定義不同任務(wù)之間相互關(guān)系的工作流模型, 無論是具體的操作動(dòng)作,還是抽象的信息處理動(dòng)作與決策過程,都可以用工作流的基本組成元素——活動(dòng)來統(tǒng)一地進(jìn)行描述。不同活動(dòng)之間的關(guān)系,無論是具體的車間中零件加工順序關(guān)系、辦公自動(dòng)化中的文件批轉(zhuǎn)、還是抽象的決策流之間的關(guān)系都可以用工作流的基本組成元素——連接弧來統(tǒng)一的進(jìn)行描述。
基于Petri網(wǎng)原理研究了21種工作流模式。
基本模式(5個(gè))
順序模式 – 按照順序執(zhí)行各項(xiàng)活動(dòng)
解釋:工作流流程中的一個(gè)活動(dòng)只有當(dāng)另一個(gè)活動(dòng)完成后才能進(jìn)行。
例子:當(dāng)訂單登記活動(dòng)完成后,客戶通知才可以進(jìn)行。
并行分支模式 – 同時(shí)運(yùn)行兩個(gè)活動(dòng)
解釋:在流程中的一點(diǎn)一個(gè)控制線程分成可以并行執(zhí)行的兩個(gè)控制線程,允許兩個(gè)活動(dòng)可以同時(shí)運(yùn)行。
例子:
同步模式 – 同步兩個(gè)并行的執(zhí)行線程
單選模式 – 從多條路徑中選擇一個(gè)執(zhí)行
簡(jiǎn)單合并模式 – 合并兩個(gè)二選一路徑
高級(jí)分支與同步模式(5個(gè))
多選模式?? –?從多條執(zhí)行路徑中選出幾條
同步合并模式 – 合并多條路徑,如果有多條路徑被選擇,則進(jìn)行同步;如果只有一條路徑被選擇,則進(jìn)行簡(jiǎn)單合并
多合并模式 – 合并多條路徑
鑒別器模式 – 合并多條路徑而不進(jìn)行同步,只執(zhí)行一次后續(xù)活動(dòng)
M中的N模式 – 合并多條路徑,進(jìn)行部分同步,只執(zhí)行一次后續(xù)活動(dòng)
結(jié)構(gòu)模式(2個(gè))
任意循環(huán)模式 – 沒有任何限制的執(zhí)行工作流?????
隱含終斷模式 – 如果沒有事情可做,就結(jié)束
多實(shí)例模式(4個(gè))
略
基于狀態(tài)的模式(3個(gè))
推遲選擇模式 – 執(zhí)行兩個(gè)可選線程中的一個(gè),那個(gè)線程將被執(zhí)行是隱含的
交替并行模式 – 兩個(gè)活動(dòng)可以以任何順序執(zhí)行,但不能并行進(jìn)行
里程碑模式 – 當(dāng)一個(gè)里程碑到達(dá)時(shí),激發(fā)一個(gè)活動(dòng)
取消模式(2個(gè))
取消活動(dòng) – 取消當(dāng)前活動(dòng)
取消過程 – 取消該過程
參考:http://blog.csdn.net/tobeand/archive/2004/11/26/195106.aspx
Wf對(duì)工作流模式的支持
1.基于圖的模式
2.導(dǎo)航器
3.狀態(tài)機(jī)
可以構(gòu)建基于wf的工作流管理系統(tǒng)嗎?
很多人都認(rèn)為wf不是工作流管理系統(tǒng),只是一個(gè)工作流引擎而已。從微軟的產(chǎn)品線來看,可以這樣認(rèn)為。比如:wf提供工作流引擎,SharePonit和K2等工作流管理系統(tǒng)的工作流引擎就是wf。那么如果我們的實(shí)際項(xiàng)目中需要使用工作流是否可以使用wf呢。
這是可以的。WF只是實(shí)現(xiàn)了非常基礎(chǔ)的部分,可以說只是提供了工作流的編程框架。和目前已有的工作流開發(fā)平臺(tái)相比,微軟已經(jīng)提供的Acitivity功能還是非常薄弱的。現(xiàn)在社區(qū)和微軟都沒有非常好的工作流實(shí)例。Start Kit是比較完善的一個(gè)例子,建議大家看一下。但是只要我們熟悉了WF的框架,通過自己實(shí)現(xiàn)一些基礎(chǔ)功能,絕對(duì)是可以做的工作流開發(fā)平臺(tái)高度的。這就是為什么要學(xué)習(xí)《WF框架編程》的意義。
按照國(guó)際工作流管理聯(lián)盟(Workflow Management Coalition,WfMC) 的定義,需要我們自己實(shí)現(xiàn)接口1到接口5。微軟的wf也提供了大量的服務(wù),我們可以使用這些服務(wù)或按照接口約定,自己實(shí)現(xiàn)服務(wù),實(shí)現(xiàn)完整的工作管理系統(tǒng)。要實(shí)現(xiàn)這個(gè)目標(biāo),需要先了解WFMC的工作流標(biāo)準(zhǔn)體系結(jié)構(gòu)并熟悉上文的工作流參考模型。
2 WFMC的標(biāo)準(zhǔn)體系結(jié)構(gòu)和工作流參考模型
2.1 WFMC標(biāo)準(zhǔn)體系結(jié)構(gòu)
為了實(shí)現(xiàn)工作流系統(tǒng)的特性,達(dá)到工作流產(chǎn)品之間的互操作性。國(guó)際工作流管理聯(lián)盟(Workflow Management Coalition,WfMC)?提出了工作流參考模型的體系結(jié)構(gòu)圖。
工作流系統(tǒng)標(biāo)準(zhǔn)體系結(jié)構(gòu)模型
這為工作流的實(shí)現(xiàn)提供了公共的基礎(chǔ),組成工作流管理系統(tǒng)的每個(gè)功能部件可以在不同的軟硬件平臺(tái)上采用不同的方法實(shí)現(xiàn),接口也可以在不同的軟硬件平臺(tái)上采用不同的設(shè)計(jì)技術(shù)和編程語言進(jìn)行編程,不同的工作流產(chǎn)品會(huì)按照互操作和協(xié)作的不同要求在一定層次上開放其接口。
從圖中可以看出,工作流管理系統(tǒng)主要由三類組成:
1)??? 軟件組件:完成工作流管理系統(tǒng)不同組成部分功能的實(shí)現(xiàn)
2)??? 系統(tǒng)控制數(shù)據(jù):工作流管理系統(tǒng)中的一個(gè)或多個(gè)軟件組件使用的數(shù)據(jù);
3)??? 應(yīng)用與應(yīng)用數(shù)據(jù):對(duì)于工作流管理系統(tǒng)來說,它們不是工作流管理系統(tǒng)的組成部分,而是屬于外部系統(tǒng)和數(shù)據(jù),它們被工作流系統(tǒng)調(diào)用來完成整個(gè)和部分工作流管理的功能。
2.2工作流管理系統(tǒng)應(yīng)該提供的功能:
按照WFMC的定義,工作流管理系統(tǒng)應(yīng)該提供3 種功能:
1)??? 建立階段的功能:主要考慮工作流過程和相關(guān)活動(dòng)的定義和建模功能。
2)??? 運(yùn)行階段的控制功能:在一定的運(yùn)行環(huán)境下,執(zhí)行工作流過程,并完成每個(gè)過程中活動(dòng)的排序和調(diào)度功能。
3)??? 運(yùn)行階段的人機(jī)交互功能:實(shí)現(xiàn)各種活動(dòng)執(zhí)行過程中用戶與IT 應(yīng)用工具之間的交互
? 2.3 WFMC參考模型
?????? 工作流執(zhí)行服務(wù)器周圍的接口是WAPI(Workflow APIs),通過這些接口可以訪問工作流系統(tǒng)的服務(wù),這些接口還控制工作流控制軟件與其他系統(tǒng)組件間的交互。在這5 個(gè)接口中的許多功能,都是被2 個(gè)或更多個(gè)接口同時(shí)擁有的,因此WAPI 可以看作是統(tǒng)一的服務(wù)接口,可以交叉使用這5 個(gè)接口來支持工作流管理功能,而不是單獨(dú)的使用其中某個(gè)接口
??????
?????? 通過參考模型可以定義:符合標(biāo)準(zhǔn)的工作流系統(tǒng)應(yīng)該能夠?qū)崿F(xiàn)接口1到接口5的這5個(gè)標(biāo)準(zhǔn)接口,即標(biāo)準(zhǔn)的工作流系統(tǒng)應(yīng)該提供:
1.過程模型定義工具
2.工作流引擎
3.工作流任務(wù)管理器(工作流客戶端)
4.用戶管理監(jiān)控接口
3 了解wf
了解了WFMC的工作流模型,我們?cè)賮砜磜f
3.1模型定義工具
?????? 過程定義包含,工作流執(zhí)行軟件運(yùn)行過程所需的過程所有詳細(xì)信息。包括過程的開始和結(jié)束條件、組成活動(dòng)、在活動(dòng)間進(jìn)行導(dǎo)航的規(guī)則、需執(zhí)行的用戶任務(wù)、可能會(huì)被調(diào)用的應(yīng)用程序、所有工作流相關(guān)數(shù)據(jù)的定義等。
?????? 過程定義可能會(huì)涉及到一個(gè)組織/角色模型,模型包含組織結(jié)構(gòu)和組織中的角色等信息。從而使過程定義在,與具體活動(dòng)或信息對(duì)象相關(guān)的組織實(shí)體和角色功能方面,十分詳細(xì)。工作流執(zhí)行服務(wù)器負(fù)責(zé)把工作流運(yùn)行環(huán)境中的參與者與相應(yīng)的組織實(shí)體或角色聯(lián)系起來。
?????? vs提供了工作流設(shè)計(jì)器。這個(gè)是集成到vs開發(fā)工具中的,如果要實(shí)現(xiàn)自己的工作流管理系統(tǒng)需要自己實(shí)現(xiàn)工作流模型定義工具,也就是工作流設(shè)計(jì)器。工作流設(shè)計(jì)器的宿主可以任選,Winfrom和Webfrom都可以,為了方便還應(yīng)該提供圖形化調(diào)試的功能。關(guān)于這些的具體實(shí)現(xiàn),在以后章節(jié)中描述。
我們可以在設(shè)計(jì)時(shí)定義組織/角色,微軟提供了和membership的角色集成,但是由于membership不支持組織結(jié)構(gòu),并且for Oracle的實(shí)現(xiàn)需要自己做。所以在實(shí)際應(yīng)用中會(huì)受到限制。解決方法是:1、自定義membership,使它能支持組織機(jī)構(gòu)或者oracle。2、通過自定義的Acitivity掛自己的權(quán)限管理模塊。
任務(wù)分配考慮:
設(shè)計(jì)時(shí)基于角色分配(分配到角色)
設(shè)計(jì)時(shí)基于人員分配(分配的具體的人,或者某個(gè)分支機(jī)構(gòu)中的所有人)
運(yùn)行時(shí)分配(比如指定審批人,指定時(shí)實(shí)例已經(jīng)運(yùn)行)
?????? WF沒有任務(wù)表的概念,WF引擎也不關(guān)心流程什么時(shí)候流轉(zhuǎn),向什么地方流轉(zhuǎn)。WF引擎按照狀態(tài)機(jī)理論,負(fù)責(zé)控制Acitivity和WF實(shí)例的各種狀態(tài),具體請(qǐng)看第二部分第三節(jié),WF調(diào)度部分。
?????? 所以是沒有辦法獲得某個(gè)人員的待辦任務(wù)之類的任務(wù)列表的。這塊要自己實(shí)現(xiàn)。以前我的做法是在應(yīng)用程序中控制,通過應(yīng)用程序指定的任務(wù)進(jìn)入任務(wù)列表,待辦任務(wù)也是檢索這個(gè)列表,整個(gè)實(shí)現(xiàn)和WF沒有關(guān)系。但是實(shí)際運(yùn)用中發(fā)現(xiàn)了很多問題。最好還是通過自定義Acitivity來實(shí)現(xiàn)任務(wù)列表。大家在跟我熟悉WF框架之后,就可以想到更好的實(shí)現(xiàn)。
3.2工作流引擎
WF就是一個(gè)工作流引擎。先了解下WFMC對(duì)工作流引擎的要求:
● 解釋過程定義
● 控制過程實(shí)例—?jiǎng)?chuàng)建、激活、掛起、終止等
● 為過程的活動(dòng)導(dǎo)航,可能要包含順序或者平行的操作、最后時(shí)間期限、對(duì)工作流相關(guān)數(shù)據(jù)進(jìn)行解釋
● 參與者簽名和退出*
● 確定任務(wù)項(xiàng)目,實(shí)現(xiàn)用戶意圖;提供接口,支持用戶交互
● 維護(hù)工作流控制數(shù)據(jù)和工作流相關(guān)數(shù)據(jù),在應(yīng)用程序間或者用戶間傳遞工作流相關(guān)數(shù)據(jù)
● 提供調(diào)用外部程序的接口,連接所有工作流相關(guān)數(shù)據(jù)
● 提供控制、管理和審查功能
WFMC對(duì)流程調(diào)整和流程模型的要求
?????? 按照WFMC的要求,工作流引擎要能支持串行、并行、分支、匯合、循環(huán)、同步、子流程多種關(guān)系模型;同時(shí)工作流引擎要能夠?qū)崿F(xiàn)版本控制,即業(yè)務(wù)流程的動(dòng)態(tài)調(diào)整。最好能夠?qū)崿F(xiàn)下面三種方式的業(yè)務(wù)流程調(diào)整:
1、只修改單個(gè)業(yè)務(wù)流程實(shí)例的模板
2、所有正在運(yùn)行的流程實(shí)例都按新的模板運(yùn)行
3、已有實(shí)例仍按調(diào)整前模板運(yùn)行
WF的版本控制看后續(xù)章節(jié)
流程異常處理
?????? 發(fā)生異常,流程能回退及業(yè)務(wù)補(bǔ)償,暫停、取消。
超時(shí)處理
?????? 通知SMS,電子郵件...
WF需要編程實(shí)現(xiàn)
幾個(gè)問題:
1.wf對(duì)各種關(guān)系模型如何支持的(參考文檔)?
2.wf版本控制實(shí)現(xiàn)方式?
3.wf異常處理?
4. wf超時(shí)處理?
3.3工作流客戶端
WFMC任務(wù)表
任務(wù)表—由工作流機(jī)分配給用戶的任務(wù)序列。任務(wù)表處理器是一個(gè)軟件組件,管理工作流參與者與工作流執(zhí)行服務(wù)器間的交互,工作流參與者的簽到和退出、請(qǐng)求過程實(shí)例的開始、任務(wù)排隊(duì)等候特殊的參與者,等。在某些系統(tǒng)中,用戶接口可能會(huì)與任務(wù)表處理器組合到一起,構(gòu)成一個(gè)簡(jiǎn)單的功能實(shí)體。也可以是用戶接口是一個(gè)單獨(dú)的軟件組件,負(fù)責(zé)提示和處理用戶對(duì)話框,并控制本地用戶的本地接口(參考體系結(jié)構(gòu))。
?????? 最簡(jiǎn)單的情況是,工作流機(jī)訪問任務(wù)表,來把任務(wù)分配給用戶;任務(wù)表處理器訪問任務(wù)表,向任務(wù)表中添加任務(wù)項(xiàng)。有許多不同的產(chǎn)品來實(shí)現(xiàn)任務(wù)表的交互(參考模型)
?????? 在WF中沒有任務(wù)表的概念。流程調(diào)度參考第三章。
?????? 在wf中有宿主的概念,工作流引擎在宿主中注冊(cè),定義相關(guān)的服務(wù),例如持久化服務(wù),監(jiān)控服務(wù)。宿主和wf引擎通過remoting或者wcf方式通信。角色定義信息存儲(chǔ)在.rule文件中
3.4 接口3(應(yīng)用程序調(diào)用接口)
WFMC定義:
創(chuàng)建會(huì)話(Session Establishment)
● 連接/斷開應(yīng)用程序會(huì)話
活動(dòng)管理功能(Activity Management Functions)
● 開始活動(dòng)
● 掛起/恢復(fù)/放棄 活動(dòng)
● 活動(dòng)完成通知
● 信號(hào)事件
● 查詢活動(dòng)屬性
數(shù)據(jù)處理功能(Data Handling Functions)
● 提供工作流相關(guān)數(shù)據(jù)
● 提供應(yīng)用程序數(shù)據(jù)或數(shù)據(jù)地址
WF實(shí)現(xiàn)
?????? wf:CallExeternalMethod,CallWebServcie
3.5 接口4
?????? 分布式多工作流引擎支持
3.6 接口5(管理監(jiān)控)
WFMC的定義
用戶管理操作(User Management operations)
● 建立/刪除/吊銷/修改用戶或工作組的權(quán)限
角色管理操作(Role Management operations)
● 定義/刪除/修改 角色的參與者
● 設(shè)置或取消角色屬性
審查管理操作(Audit Management operations)
● 查詢/打印/新建/刪除審查記錄或事件日志,等
資源控制操作(Resource Control operations)
● 設(shè)置/取消/修改 過程或活動(dòng)并發(fā)級(jí)別
● 訪問資源控制數(shù)據(jù)(數(shù)量、開始、使用參數(shù)等)
過程管理功能(Process Supervisory Functions)
改變工作流過程定義或其擴(kuò)展過程實(shí)例的運(yùn)行狀態(tài)
● 使用/不使用 某個(gè)版本的過程定義
● 改變某一類型的所有過程/活動(dòng)實(shí)例的狀態(tài)
● 為某一類型的所有過程/活動(dòng)實(shí)例的屬性賦值
● 終止所有的過程實(shí)例
過程狀態(tài)功能(Process Status Functions)
● 打開/關(guān)閉 過程/活動(dòng)實(shí)例查詢,設(shè)置過濾標(biāo)準(zhǔn)
● 取得過程/活動(dòng)實(shí)例的詳細(xì)信息
● 取得特殊過程或活動(dòng)實(shí)例的詳細(xì)信息
實(shí)際中應(yīng)該實(shí)現(xiàn)的功能
1、實(shí)時(shí)跟蹤工作流的運(yùn)行狀況
2、超時(shí)任務(wù)監(jiān)控
3、跟蹤查詢歷史工作流的處理過程?工作流異常處理
4、可執(zhí)行任務(wù)改派
5、可以掛起/恢復(fù)工作流
6、可以取消工作流
7、可實(shí)現(xiàn)業(yè)務(wù)流程動(dòng)態(tài)調(diào)整
wf對(duì)管理監(jiān)控的支持:流程級(jí)和活動(dòng)級(jí)的日志(TrackingService)。默認(rèn)只支持保存到sql server,需要按照重新實(shí)現(xiàn)接口才能實(shí)現(xiàn)保存到oracle或者文件。默認(rèn)是控制臺(tái)界面的日志顯示,需要圖形化的監(jiān)控和管理界面。
結(jié)論:WF只是實(shí)現(xiàn)了非常基礎(chǔ)的部分,可以說只是提供了工作流的編程框架。和目前已有的工作流開發(fā)平臺(tái)相比,微軟已經(jīng)提供的Acitivity功能還是非常薄弱的。現(xiàn)在社區(qū)和微軟都沒有非常好的工作流實(shí)例。Start Kit是比較完善的一個(gè)例子,建議大家看一下。但是只要我們熟悉了WF的框架,通過自己實(shí)現(xiàn)一些基礎(chǔ)功能,絕對(duì)是可以做的工作流開發(fā)平臺(tái)高度的。這就是為什么要學(xué)習(xí)《WF框架編程》的意義
本文引用:http://www.cnblogs.com/lodestar/archive/2008/03/29/1129154.html
總結(jié)
- 上一篇: 单位交的生育险怎么用
- 下一篇: 反射:InvokeMethod 活动调用