作者:哈多哥_864 | 来源:互联网 | 2023-10-12 15:04
返回目录从几年前做OA时接触过工作流的概念,那时还比较模糊,现在觉得清晰一些了,想把自己一些理解写出来,与大家分享!工作流最简单的就是京东的订单处理,它其实就是个简单的工作流,每个节点可能有前
返回目录
从几年前做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 ///
2 /// 工作流实体
3 ///
4 [MetadataType(typeof(WorkFlow_Info_Meta))]
5 public partial class WorkFlow_Info
6 {
7 #region 导航属性
8 ///
9 /// 是否为首结点
10 ///
11 public bool IsFirstNode
12 {
13 get
14 {
15 return this.PrevNode == null;
16 }
17 }
18 ///
19 /// 是否为尾结点
20 ///
21 public bool IsEndNode
22 {
23 get
24 {
25 return this.NextNode == null;
26 }
27 }
28 ///
29 /// 前驱节点
30 ///
31 public WorkFlow_Info PrevNodeEntity { get; set; }
32 ///
33 /// 后继节点
34 ///
35 public WorkFlow_Info NextNodeEntity { get; set; }
36 #endregion
37 }
好了,有了上面的基础,我们把这个结构体现到实际项目中,如一个产品从建立到最后的上架,可能就是一个工作流,它的流程如:
建立产品=》审核产品信息=》产品订价=》产品上架
而我们再结合之前的链表结果,可以很容易的得到下面的结果了:
A产品是刚刚被建立,还没有进行审核(被建立)
B产品已经经过了审核(被审核)
C产品当前已经处于上价状态了(被上架)
总结:感谢数据结构真的很有用,如果想写出健壮的程序,看看计算机基础,数据结构导论,操作系统概论还是很有必要的,呵呵。
返回目录