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