数据结构~工作流的设计(链表结构)

返回目录

从几年前做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产品当前已经处于上价状态了(被上架)

总结:感谢数据结构真的很有用,如果想写出健壮的程序,看看计算机基础,数据结构导论,操作系统概论还是很有必要的,呵呵。

返回目录

posted @ 2012-12-17 23:33  张占岭  阅读(4128)  评论(4编辑  收藏  举报