開(kāi)發(fā)一套通用流程引擎軟件,在主軟件可以通過(guò)簡(jiǎn)單的注冊、引用,即可完成軟件流程部門(mén)的設計開(kāi)發(fā)。
1.通過(guò)EntityFramework的CodeFirst實(shí)現流程有關(guān)的數據庫表的創(chuàng )建。
2.通過(guò)SilverLight實(shí)現流程的可視化操作。

一、Entities流程實(shí)體
定義流程相關(guān)的數據庫實(shí)體。

1.WorkflowInitializer.cs 初始化數據庫類(lèi),定義創(chuàng )建數據庫時(shí)的默認數據。相關(guān)類(lèi)定義如下:

2.WorkflowDB.cs 繼承System.Data.Entity.DbContext 定義流程引擎數據庫上下文類(lèi)。相關(guān)類(lèi)定義如下:

3.ModuleList.cs 模塊類(lèi),主應用程序包含多個(gè)模塊應用流程時(shí),有此處區分具體模塊需應用的具體流程。相關(guān)類(lèi)定義如下:

4.WorkflowMain.cs 流程主表類(lèi),定義流程相關(guān)的屬性。相關(guān)類(lèi)定義如下:

5.WorkflowDetailed.cs 流程子表類(lèi),定義流程步驟的相關(guān)屬性。相關(guān)類(lèi)定義如下:

6.TaskList.cs 任務(wù)表,定義針對處理人的相關(guān)任務(wù)信息。相關(guān)類(lèi)定義如下:

7.AnnexList.cs 附件表,針對任務(wù)處理時(shí)上傳附件的需求。相關(guān)類(lèi)定義如下:

二、Abstract 接口
定義外部訪(fǎng)問(wèn)的接口類(lèi)。

1.ConcreteFactory.cs 工廠(chǎng)類(lèi),對外提供接口的實(shí)例。代碼如下:
1 using System; 2 using System.Collections.Generic; 3 using System.Linq; 4 using System.Text; 5 6 namespace Workflow.Abstract 7 { 8 public class ConcreteFactory 9 {10 /// <summary>11 /// 創(chuàng )建具體實(shí)現的類(lèi)的實(shí)例12 /// </summary>13 /// <typeparam name="T">接口類(lèi)型</typeparam>14 /// <typeparam name="T2">具體實(shí)現</typeparam>15 /// <returns></returns>16 public static T CreateConcrete<T,T2>() where T2:T17 {18 return (T)Activator.CreateInstance<T2>();19 }20 }21 }
2.Enums.cs 定義相關(guān)的枚舉。代碼如下:

3. I*Operation.cs 對應數據庫表的相關(guān)操作。代碼如下:





4.IWorkflowOperation.cs 流程的總體操作。代碼如下:

5.IPersonList.cs 具體應用程序需實(shí)現的權限相關(guān)的人員接口。代碼如下:

6.PersonnelMode.cs 全局角色類(lèi)型,通過(guò)單例模式實(shí)現對應用程序全局人員類(lèi)型的管理。代碼如下:

三、Concrete接口的實(shí)現
對接口的具體實(shí)現。

1. *Operation.cs 對應數據庫表的相關(guān)操作。代碼如下:





2.WorkflowOperation.cs 流程的總體操作。代碼如下:

3.PersonPersonnelMode.cs 人員類(lèi)型中,人員的實(shí)現實(shí)例類(lèi)。代碼如下:

四、MyEvaluator.cs 執行表達式或方法,返回結果的類(lèi)。
相關(guān)代碼如下:

1.不同的軟件可能包含不同人員類(lèi)型(如流程審批中可能需要組織機構中的部門(mén)經(jīng)理,還可能需要角色中的計劃員等)。
解決方案:提供統一的接口(IPersonList),具體的應用程序實(shí)現接口,并在全局變量PersonnelModeList中注冊接口實(shí)現類(lèi)的實(shí)例。
2.條件步驟的具體選擇(如在滿(mǎn)足條件一的情況下走步驟一,而在滿(mǎn)足條件二的時(shí)候可能需要走步驟二)。
解決方案:提供可行性表達式的方法,根據執行表達式的結果確定具體的步驟(如(10>@p?1:2)會(huì )根據傳入的p的值確定是走步驟一還是走步驟二)。
因并沒(méi)有與具體的表單設計引擎相關(guān)聯(lián),流程引擎中必然存在許多不足的地方,比如,條件步驟的具體選擇就存在很大的局限性,無(wú)法直接設置某個(gè)屬性的值去做條件判斷從而確定具體的步驟。
由于筆者知識面的局限性,引擎中可能還存在筆者沒(méi)有考慮到的因素,望讀者們能與筆者共同發(fā)現引擎中的不足以及尋找最佳的解決方案?;蛘咦x者對現有的代碼結構、解決方案等有好的意見(jiàn)均可與筆者溝通(聯(lián)系方式見(jiàn)上↑)。
注:相關(guān)源碼會(huì )在下一篇的可視化流程設計中一并給出,有興趣的讀者請關(guān)注。
相關(guān)文章連接
可視化流程設計——流程設計器演示(基于Silverlight):http://www.cnblogs.com/qidq/p/Workflow_Silverlight.html
聯(lián)系客服