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

返回目录

从几年前做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 @   张占岭  阅读(4151)  评论(4编辑  收藏  举报
编辑推荐:
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
阅读排行:
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 记一次.NET内存居高不下排查解决与启示
历史上的今天:
2011-12-17 LINQ TO SQL三层架构~更新操作
2011-12-17 LINQ TO SQL三层架构~添加操作
点击右上角即可分享
微信分享提示