大家都知道,在WF中默認(rèn)情況下,其活動(dòng)是以樹狀結(jié)構(gòu)組成的,簡(jiǎn)單說(shuō)就是復(fù)合活動(dòng)包含其子活動(dòng),如果子活動(dòng)也是復(fù)合活動(dòng)也可以包含其子活動(dòng),但同一個(gè)活動(dòng)不能成為兩個(gè)活動(dòng)的子活動(dòng)。這種方式被大量使用在WF自帶的活動(dòng)庫(kù)中,比如:循環(huán),條件活動(dòng)等等。 這種方式的缺陷有以下幾點(diǎn): 1、傳統(tǒng)的流程結(jié)構(gòu)方式都是線性的,這種樹狀的可能會(huì)使流程設(shè)計(jì)人員反感; 2、如果樹的層次太多,會(huì)使流程難以理解。
由此,是不是可以既不和WF內(nèi)在樹狀結(jié)構(gòu)沖突,又能在形式上以線性的方式表達(dá)流程結(jié)構(gòu)呢? 我的想法是: 1、構(gòu)建流程對(duì)象,把它作為根活動(dòng)(復(fù)合活動(dòng)),其他元素都以其子活動(dòng)存在; 2、構(gòu)建流(線)對(duì)象,它不是活動(dòng)(Acticity)的子類,它指明了源活動(dòng)和目的活動(dòng),同時(shí)也保存在流程對(duì)象中; 3、WF從根活動(dòng)開始執(zhí)行,這里就是流程對(duì)象,由它根據(jù)線的流向決定下一個(gè)執(zhí)行的活動(dòng),但是它不負(fù)責(zé)諸如循環(huán),條件這樣的結(jié)構(gòu); 4、構(gòu)建循環(huán),條件等活動(dòng)(非復(fù)合)并由其根據(jù)線的流向決定下一個(gè)執(zhí)行的活動(dòng)。
這種方式也不是完美的,其缺點(diǎn)如下: 1、需要自己來(lái)構(gòu)建循環(huán)、條件等流程結(jié)構(gòu),基本不能復(fù)用WF所提供的; 2、當(dāng)涉及取消、補(bǔ)償、異常處理時(shí),不僅需要自己來(lái)處理其跳轉(zhuǎn)流程,而且還需要構(gòu)建管理分支活動(dòng)的行為(考慮分支比較復(fù)雜的情況)。
當(dāng)然,這兩種方式都是可行的構(gòu)建方案,具體選擇還要看各自應(yīng)用場(chǎng)景的不同以及項(xiàng)目本身的預(yù)算等條件的不同。 PS:這里討論的不涉及狀態(tài)機(jī)的方式。
|