第1关

一天,老板找到我,说要做个简单的工作流引擎。

我查了一天啥是工作流,然后做出了如下版本:

  • 按顺序添加任意个审批人组成一个链表,最后加一个结束节点
  • 记录当前审批人,当审批完后,审批人向后移动一位
  • 当审批人对应结束节点时,流程结束

老板:简陋了点。

第2关

老板又来了:要支持会签节点。

我又查了一天啥是会签节点,发现会签节点就是一个大节点,里面有很多审批人,当这个大节点里的所有人都审批通过后,才能进入下一个节点。

我想了一个星期,推翻了原来的链表式设计:

结构上我做了如下调整:

  • 把节点分为两大类:简单节点(上图中长方形)和复杂节点(上图中圆形)。
  • 用一棵树表示整个流程,其中叶子节点都是简单节点,简单节点都是叶子节点。
  • 每个简单节点里都有且仅有有一个审批人。
  • 复杂节点包含若干个子节点。
  • 加入会签节点: 会签节点激活后,所有的子节点都可以审批,当所有的子节点都审批完毕后,会签节点完成。
  • 加入串行节点:子节点只能从左到右依次进行审批,当最后一个子节点审批完成后,串行节点完成。
  • 所有的工作流最外层都是一个串行节点,该节点完成后代表整个工作流完成。

为了控制审批流程,我设计了一些节点状态:

  • Ready: 可以进行审批操作的简单节点是Ready状态。
  • Complete: 已经审批完成的节点状态。
  • Future: 现在还没有走到的节点状态。
  • Waiting: 只有复杂节点有该状态,表示在等待子节点审批。

借助上述规则,一次带会签节点的工作流审批过程如下:


老板:有点意思。

第3关

老板来了:要支持并行节点。

我查了一下午啥是并行节点,发现并行节点是一个包含很多审批人的大节点,这个大节点里任何一个人审批通过,则该节点就完成。

然后很快就加入了并行节点:

  • 并行节点是一个复杂节点,该节点激活时,任何一个子节点都可以进行审批,且任何一个子节点是完成状态时,该节点完成。

加入新状态 Skip:

  • 当一个并行节点的子节点状态为非(Ready, Waiting)时,其它兄弟节点及其子节点的状态被置为Skip。

举个栗子

老板要我开发一个简单的工作流引擎 !相关推荐

  1. 老板要我开发一个简单的工作流引擎

    点击上方蓝色"方志朋",选择"设为星标"回复"666"获取独家整理的学习资料! 第1关 一天,老板找到我,说要做个简单的工作流引擎. 我查了 ...

  2. 今天,老板要我开发一个简单的工作流引擎

    第1关 一天,老板找到我,说要做个简单的工作流引擎. 我查了一天啥是工作流,然后做出了如下版本: 按顺序添加任意个审批人组成一个链表,最后加一个结束节点 记录当前审批人,当审批完后,审批人向后移动一位 ...

  3. 惊了,老板要我开发一个工作流引擎!

    来源:https://www.cnblogs.com/duck-and-duck/p/14436373.html 第1关 一天,老板找到我,说要做个简单的工作流引擎. 我查了一天啥是工作流,然后做出了 ...

  4. django之十一--开发一个简单的醉得意菜单和人均支付金额查询页面

    一.前言 针对搭伙吃饭的点菜,我们时常会从人数和人均金额去考虑一家餐厅的菜单,所以点菜对于大锅饭的伙伴也成了一门学问和难题,本篇文章巧妙的应用代码思想,将实际问题转化为代码问题,例如如下是一个醉得意的 ...

  5. 国外大牛教你,如何用Python开发一个简单的区块链数据结构| 建议收藏

    来源 | Medium 作者 | arjuna sky kok 整理 / Aholiab 出品 | 区块链大本营(blockchain_camp) 根据IEEE此前的一项调查,Python已成为最受开 ...

  6. Beginning WF4读书笔记(一):创建一个简单的工作流

    让我们以创建一个简单的工作流开始.开启Visual Studio (VS) 2010,选择New Project.在已经安装的模版下面,选择Visual C#-Workflow,你会看到提供了四个模版 ...

  7. 利用WCF的callback机制开发一个简单的多人游戏模型

    本文介绍了如何利用WCF和callback机制开发一个简单的多人在线游戏模型. 运行过程如下: 当game service 启动之后,若干个客户端便会自动连接到服务器.当某个客户端点击join gam ...

  8. [译]使用 Rust 开发一个简单的 Web 应用,第 4 部分 —— CLI 选项解析

    原文地址:A Simple Web App in Rust, Part 4 -- CLI Option Parsing 原文作者:Joel's Journal 译文出自:掘金翻译计划 本文永久链接:g ...

  9. php开发mvc教程,php开发一个简单的MVC

    本文通过实例为大家介绍用php开发一个简单mvc的方法,起到势砖引玉的作用,本文比较适合刚接触mvc的朋友. MVC其实就是三个Model,Contraller,View单词的简称. Model,主要 ...

  10. WF4.0入门系列1——创建一个简单的工作流

    WF4.0入门系列1--创建一个简单的工作流 打开VS2010,选择文件-新建-项目,选择Workflow项 工作流台应用程序,在名称处输入chapter01,选择合适的位置,这里默认,单击确定. V ...

最新文章

  1. [Android] osx下如何使用SublimeText阅读Android系统源码
  2. div 居中,浏览器兼容性
  3. 如何备份和还原 Outlook Express 数据
  4. 二分查找 寻找指定数 python 实现
  5. maven的离线模式
  6. Python 获取md5值(hashlib)
  7. 综述 | 深度学习弱目标检测定位
  8. python2与pyrhon3的区别,python—文件操作,函数练习题
  9. python的几个实用命令_你不知道的几个Python命令,比Excel好用多了
  10. 3371 【模板】单源最短路径(Dijsktra)
  11. 怎样在photoshop中快速批量,修改图片
  12. 05-树7 堆中的路径
  13. PHP图片水印右下角,php图片水印处理
  14. 【Python】字符串的一些操作
  15. redis安装与配置
  16. CRMEB开源商城部署在腾讯云
  17. Go语言第一课背后的那些事儿
  18. linux getchar函数使用
  19. MATLAB数字图像课题的开题报告
  20. 【PG】PG基础操作

热门文章

  1. EasyUI:datagrid冻结表头
  2. 大脑开发——超右脑觉醒
  3. 关于C++条件编译的细节
  4. Python_画boxplot 盒图/箱线图
  5. Style transfer系列论文之——Arbitrary Style Transfer in Real-time with Adaptive Instance Normali,ICCV, 2017
  6. 计算机视觉中,目前有哪些经典的目标跟踪算法?
  7. 论文简述 | Voxel Map for Visual SLAM
  8. python中的pickle解析
  9. Oracle 左连接(+)加号用法及常用语法之间的关系
  10. Python学习 5day__基础知识