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