1.Windows Workflow Foundation—微軟的工作流平臺(tái)
工作流(Workflow)就是指工作流程中的計(jì)算模型,也就是在工作中如何前后組織在一起的邏輯和規(guī)則在計(jì)算機(jī)中以恰當(dāng)?shù)臄?shù)學(xué)模型進(jìn)行展現(xiàn)出來并對(duì)其實(shí)施過程進(jìn)行計(jì)算。工作流所要解決的主要問題就是:為實(shí)現(xiàn)某個(gè)目標(biāo),在眾多個(gè)參加者之間,利用計(jì)算機(jī)技術(shù),按某種預(yù)定規(guī)則自動(dòng)傳遞信息、文檔或有某種聯(lián)系的任務(wù)。微軟的工作流(Windows Worldlow Foundation,以下簡(jiǎn)稱WWF)使用的是“反應(yīng)動(dòng)作式程序的模型”(Model of Reactive Program),即需要等待動(dòng)作激發(fā)以后才能做出相應(yīng)的動(dòng)作。
WWF本身并不是一個(gè)可執(zhí)行的應(yīng)用程序,而是一個(gè)廣泛且通用的工作流架。并且從下而上、在每個(gè)級(jí)別都針對(duì)可擴(kuò)展性進(jìn)行了設(shè)計(jì)。其目的就是要提供一個(gè)基礎(chǔ)性的架構(gòu)。從而讓軟件開發(fā)人員能夠從流程的觀點(diǎn)去創(chuàng)建應(yīng)用程序?;蛇@一技術(shù)的解決方案,是由Microsoft,NET Framework代碼支持且在宿主應(yīng)用程序中運(yùn)行的互連組件組成。就像以可視化的方式創(chuàng)建Web頁(yè)面一樣,您需要在可視化的設(shè)計(jì)工具中制訂特定工作流的步驟,并且添加代碼到工作流組件以實(shí)現(xiàn)規(guī)則并定義業(yè)務(wù)過程。WWF編程主要包括兩個(gè)方面:
一個(gè)是設(shè)計(jì)工作流及其活動(dòng)。另一個(gè)是在應(yīng)用程序中使用這些工作流。
2.VWVF的核心
Workflow本身只是一組活動(dòng)的集合,并且在一個(gè)宿主應(yīng)用程序中運(yùn)行,所以說工作_流的開發(fā)本身是沒有任何界面的,只是定義一個(gè)流程或規(guī)則。而真正需要開發(fā)的流程則是將我們的應(yīng)用程序連接起來的一些業(yè)務(wù)邏輯,我們通常稱為Business Logic。這里的應(yīng)用程序可以是任何的應(yīng)用程序,可以是Windows應(yīng)用程序、Web應(yīng)用程序,也可以是Web服務(wù),甚至也可以是像Office這樣的軟件產(chǎn)品。我們可以將之統(tǒng)稱為宿主應(yīng)用程序(Host Process)。當(dāng)然對(duì)于我們開發(fā)人員而言。宿主應(yīng)用程序就是Workflow的一個(gè)Runtime。當(dāng)它運(yùn)行時(shí),其實(shí)就是運(yùn)行了一個(gè)Runtime的實(shí)例化。
在WWF中主要包含了三個(gè)部分Bass Activity Library、Runtime Engine~Runtime Services。其中Base Acvity Library~由微軟提供的20多個(gè)基本的動(dòng)作邏輯組成。如條件判斷、指令循環(huán)、調(diào)用Web Services、調(diào)用其它的Worldlow等等這些最最基本的業(yè)務(wù)邏輯。當(dāng)然我們也可以自己將舌動(dòng)庫(kù)作擴(kuò)充,只需要將擴(kuò)充邏輯封裝成DLL文牛就可以進(jìn)行調(diào)用了。而眾多的活動(dòng)庫(kù)則組成了我們需要的應(yīng)用程序的活動(dòng)庫(kù)。例如我們建立某個(gè)Workflow中的每一個(gè)流程就是一個(gè)活動(dòng),而這個(gè)活動(dòng)中的一些連接線就表示這些活動(dòng)之間的相巨關(guān)系。這樣的一種組合就定義了整個(gè)工作流的邏輯。
另外的Runtime Engine主要負(fù)責(zé)運(yùn)行workftow并對(duì)其進(jìn)行狀態(tài)管理,如果需要調(diào)用windows Workflowl~,我們只需要對(duì)其進(jìn)行實(shí)例化即可。
當(dāng)然,需要注意的是Runtime Engine還對(duì)Workflow的運(yùn)行狀態(tài)進(jìn)行管理,我們每次只能實(shí)例化某一個(gè)對(duì)象。所以說當(dāng)我們實(shí)例化對(duì)象的時(shí)候應(yīng)先判斷是否已經(jīng)存在,如果存在必須先將其終止,不然無(wú)法創(chuàng)建新的對(duì)象。當(dāng)然如果我們需要?jiǎng)?chuàng)建多個(gè)工作流程的時(shí)候可以采取創(chuàng)建一個(gè)Runtime Engine的實(shí)例。并在這個(gè)實(shí)例下創(chuàng)建多個(gè)Workflow對(duì)象。
第三個(gè)組成部分是Runtime Services,其主要負(fù)責(zé)宿主應(yīng)用程序和Worktlow~間的通訊。
3.WWF的主要模式
WWF最主要的特點(diǎn)就是支持面向人機(jī)交互的工作流程,它既可以使用內(nèi)建的模式也可以自定義模式。Microsoft Visual Studio 2008內(nèi)建了一些模式,主要有順序模式、基于規(guī)則的模式和狀態(tài)機(jī)模式。
順序模式是按照預(yù)設(shè)流程處理順序來驅(qū)動(dòng)的,其運(yùn)行機(jī)制就是根據(jù)預(yù)先設(shè)定的流程,先執(zhí)行完第一步,再執(zhí)行第二步,這樣一步一部執(zhí)行,而且流程相對(duì)比較固定。我們就以簡(jiǎn)單的財(cái)務(wù)報(bào)銷為例,流程發(fā)起人填寫報(bào)銷單并提交項(xiàng)目經(jīng)N-->項(xiàng)目經(jīng)理審核并提交總經(jīng)理—>總經(jīng)理審核轉(zhuǎn)給財(cái)務(wù)—>財(cái)務(wù)部支付費(fèi)用。
這就是一種典型的順序模式,因?yàn)楣ぷ髁髦械拿恳粋€(gè)活動(dòng)都是按照預(yù)設(shè)規(guī)則來運(yùn)行的,并且多個(gè)活動(dòng)之間也是有明確的先后次序的。順序模式是一種比較正式的、用于典型的結(jié)構(gòu)化的工作流模式。
狀態(tài)機(jī)模式則是根據(jù)事件來驅(qū)動(dòng)的工作流程,它和順序模式相比最大的區(qū)別在于狀態(tài)機(jī)模式里面不再是一個(gè)一個(gè)的流程,取而代之的是一個(gè)一個(gè)的狀態(tài)。每個(gè)狀態(tài)和下一個(gè)狀態(tài)之間可能是沒有任何關(guān)聯(lián)的,而每個(gè)狀態(tài)又是一個(gè)相對(duì)獨(dú)立的狀態(tài)。整個(gè)流程在完成的時(shí)候又是狀態(tài)與狀態(tài)的切換。我們同樣以財(cái)務(wù)報(bào)銷為例,報(bào)銷單一開始處于初始狀態(tài),當(dāng)項(xiàng)目經(jīng)理審核通過以后,報(bào)銷單的狀態(tài)改變?yōu)橥ㄟ^,那么就直接轉(zhuǎn)換到財(cái)務(wù)審核狀態(tài)。如果項(xiàng)目經(jīng)理審核通過以后,報(bào)銷單的狀態(tài)則變?yōu)榻Y(jié)束,那么報(bào)銷單狀態(tài)切換到結(jié)束狀態(tài)。而當(dāng)報(bào)銷單金額超出項(xiàng)目經(jīng)理審核權(quán)限的時(shí)候,那么審核狀態(tài)變?yōu)樘峤豢偨?jīng)理審核,同時(shí)整個(gè)流程切換到了總經(jīng)理審核的狀態(tài)……以此類推,直到報(bào)銷單狀態(tài)切換到結(jié)束狀態(tài),那么整個(gè)流程也就結(jié)束了。
4.WWF的實(shí)現(xiàn)
微軟的WWF是基于.Net Framework 3.0(及以上版本)的,所以利用Visual Studio 2008可以很方便的實(shí)現(xiàn)。我們以一個(gè)最簡(jiǎn)單的順序模式為例,流程從開始到結(jié)束主要完成一個(gè)提交報(bào)銷憑證的活動(dòng)。為了實(shí)現(xiàn)這一功能,我們需要先設(shè)置一些屬性。
5.WWF的使用場(chǎng)景
雖然說WWF帶來了如此巨大的便利,而且所有的應(yīng)用程序開發(fā)或多或少都會(huì)涉及到一些商業(yè)邏輯或者流程,但是不見得所有的應(yīng)用流程都需要使用WWF進(jìn)行開發(fā)。