數據結構~工作流的設計(鏈表結構)


返回目錄

從幾年前做OA時接觸過工作流的概念,那時還比較模糊,現在覺得清晰一些了,想把自己一些理解寫出來,與大家分享!

工作流最簡單的就是京東的訂單處理,它其實就是個簡單的工作流,每個節點可能有前驅節點(prev node)和后繼節點(next node),如圖:

而這個結構讓我們想起了數據結構里的“鏈表”(鏈表由一系列結點(鏈表中每一個元素稱為結點)組成,結點可以在運行時動態生成。每個結點包括兩個部分:一個是存儲數據元素的數據域,另一個是存儲下一個結點地址的指針域。),更多鏈表的基礎可以看我這篇文章。

而反映到C#中,我們可以把鏈接結構設計成這樣的類,而對於數據表來說也是這樣的數據結構:

反映到類中,是這樣定義的:

1   public partial class WorkFlow_Info
2     {
3         public int ID { get; set; }
4         public Nullable<int> PrevNode { get; set; }
5         public Nullable<int> NextNode { get; set; }
6         public string Name { get; set; }
7         public string Info { get; set; }
8     }

它有一些導航屬性,用來得到每個節點的前驅和后繼節點信息:

 1     /// <summary>
 2     /// 工作流實體
 3     /// </summary>
 4     [MetadataType(typeof(WorkFlow_Info_Meta))]
 5     public partial class WorkFlow_Info
 6     {
 7         #region 導航屬性
 8         /// <summary>
 9         /// 是否為首結點
10         /// </summary>
11         public bool IsFirstNode
12         {
13             get
14             {
15                 return this.PrevNode == null;
16             }
17         }
18         /// <summary>
19         /// 是否為尾結點
20         /// </summary>
21         public bool IsEndNode
22         {
23             get
24             {
25                 return this.NextNode == null;
26             }
27         }
28         /// <summary>
29         /// 前驅節點
30         /// </summary>
31         public WorkFlow_Info PrevNodeEntity { get; set; }
32         /// <summary>
33         /// 后繼節點
34         /// </summary>
35         public WorkFlow_Info NextNodeEntity { get; set; }
36         #endregion
37     }

好了,有了上面的基礎,我們把這個結構體現到實際項目中,如一個產品從建立到最后的上架,可能就是一個工作流,它的流程如:

建立產品=》審核產品信息=》產品訂價=》產品上架

而我們再結合之前的鏈表結果,可以很容易的得到下面的結果了:

A產品是剛剛被建立,還沒有進行審核(被建立)

B產品已經經過了審核(被審核)

C產品當前已經處於上價狀態了(被上架)

總結:感謝數據結構真的很有用,如果想寫出健壯的程序,看看計算機基礎,數據結構導論,操作系統概論還是很有必要的,呵呵。

返回目錄


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM