老板要我开发一个简单的工作流引擎 !
第1关
一天,老板找到我,说要做个简单的工作流引擎。
我查了一天啥是工作流,然后做出了如下版本:
- 按顺序添加任意个审批人组成一个链表,最后加一个结束节点
- 记录当前审批人,当审批完后,审批人向后移动一位
- 当审批人对应结束节点时,流程结束
老板:简陋了点。
第2关
老板又来了:要支持会签节点。
我又查了一天啥是会签节点,发现会签节点就是一个大节点,里面有很多审批人,当这个大节点里的所有人都审批通过后,才能进入下一个节点。
我想了一个星期,推翻了原来的链表式设计:
结构上我做了如下调整:
- 把节点分为两大类:简单节点(上图中长方形)和复杂节点(上图中圆形)。
- 用一棵树表示整个流程,其中叶子节点都是简单节点,简单节点都是叶子节点。
- 每个简单节点里都有且仅有有一个审批人。
- 复杂节点包含若干个子节点。
- 加入会签节点: 会签节点激活后,所有的子节点都可以审批,当所有的子节点都审批完毕后,会签节点完成。
- 加入串行节点:子节点只能从左到右依次进行审批,当最后一个子节点审批完成后,串行节点完成。
- 所有的工作流最外层都是一个串行节点,该节点完成后代表整个工作流完成。
为了控制审批流程,我设计了一些节点状态:
- Ready: 可以进行审批操作的简单节点是Ready状态。
- Complete: 已经审批完成的节点状态。
- Future: 现在还没有走到的节点状态。
- Waiting: 只有复杂节点有该状态,表示在等待子节点审批。
借助上述规则,一次带会签节点的工作流审批过程如下:
老板:有点意思。
第3关
老板来了:要支持并行节点。
我查了一下午啥是并行节点,发现并行节点是一个包含很多审批人的大节点,这个大节点里任何一个人审批通过,则该节点就完成。
然后很快就加入了并行节点:
- 并行节点是一个复杂节点,该节点激活时,任何一个子节点都可以进行审批,且任何一个子节点是完成状态时,该节点完成。
加入新状态 Skip:
- 当一个并行节点的子节点状态为非(Ready, Waiting)时,其它兄弟节点及其子节点的状态被置为Skip。
举个栗子
老板要我开发一个简单的工作流引擎 !相关推荐
- 老板要我开发一个简单的工作流引擎
点击上方蓝色"方志朋",选择"设为星标"回复"666"获取独家整理的学习资料! 第1关 一天,老板找到我,说要做个简单的工作流引擎. 我查了 ...
- 今天,老板要我开发一个简单的工作流引擎
第1关 一天,老板找到我,说要做个简单的工作流引擎. 我查了一天啥是工作流,然后做出了如下版本: 按顺序添加任意个审批人组成一个链表,最后加一个结束节点 记录当前审批人,当审批完后,审批人向后移动一位 ...
- 惊了,老板要我开发一个工作流引擎!
来源:https://www.cnblogs.com/duck-and-duck/p/14436373.html 第1关 一天,老板找到我,说要做个简单的工作流引擎. 我查了一天啥是工作流,然后做出了 ...
- django之十一--开发一个简单的醉得意菜单和人均支付金额查询页面
一.前言 针对搭伙吃饭的点菜,我们时常会从人数和人均金额去考虑一家餐厅的菜单,所以点菜对于大锅饭的伙伴也成了一门学问和难题,本篇文章巧妙的应用代码思想,将实际问题转化为代码问题,例如如下是一个醉得意的 ...
- 国外大牛教你,如何用Python开发一个简单的区块链数据结构| 建议收藏
来源 | Medium 作者 | arjuna sky kok 整理 / Aholiab 出品 | 区块链大本营(blockchain_camp) 根据IEEE此前的一项调查,Python已成为最受开 ...
- Beginning WF4读书笔记(一):创建一个简单的工作流
让我们以创建一个简单的工作流开始.开启Visual Studio (VS) 2010,选择New Project.在已经安装的模版下面,选择Visual C#-Workflow,你会看到提供了四个模版 ...
- 利用WCF的callback机制开发一个简单的多人游戏模型
本文介绍了如何利用WCF和callback机制开发一个简单的多人在线游戏模型. 运行过程如下: 当game service 启动之后,若干个客户端便会自动连接到服务器.当某个客户端点击join gam ...
- [译]使用 Rust 开发一个简单的 Web 应用,第 4 部分 —— CLI 选项解析
原文地址:A Simple Web App in Rust, Part 4 -- CLI Option Parsing 原文作者:Joel's Journal 译文出自:掘金翻译计划 本文永久链接:g ...
- php开发mvc教程,php开发一个简单的MVC
本文通过实例为大家介绍用php开发一个简单mvc的方法,起到势砖引玉的作用,本文比较适合刚接触mvc的朋友. MVC其实就是三个Model,Contraller,View单词的简称. Model,主要 ...
- WF4.0入门系列1——创建一个简单的工作流
WF4.0入门系列1--创建一个简单的工作流 打开VS2010,选择文件-新建-项目,选择Workflow项 工作流台应用程序,在名称处输入chapter01,选择合适的位置,这里默认,单击确定. V ...
最新文章
- [Android] osx下如何使用SublimeText阅读Android系统源码
- div 居中,浏览器兼容性
- 如何备份和还原 Outlook Express 数据
- 二分查找 寻找指定数 python 实现
- maven的离线模式
- Python 获取md5值(hashlib)
- 综述 | 深度学习弱目标检测定位
- python2与pyrhon3的区别,python—文件操作,函数练习题
- python的几个实用命令_你不知道的几个Python命令,比Excel好用多了
- 3371 【模板】单源最短路径(Dijsktra)
- 怎样在photoshop中快速批量,修改图片
- 05-树7 堆中的路径
- PHP图片水印右下角,php图片水印处理
- 【Python】字符串的一些操作
- redis安装与配置
- CRMEB开源商城部署在腾讯云
- Go语言第一课背后的那些事儿
- linux getchar函数使用
- MATLAB数字图像课题的开题报告
- 【PG】PG基础操作
热门文章
- EasyUI:datagrid冻结表头
- 大脑开发——超右脑觉醒
- 关于C++条件编译的细节
- Python_画boxplot 盒图/箱线图
- Style transfer系列论文之——Arbitrary Style Transfer in Real-time with Adaptive Instance Normali,ICCV, 2017
- 计算机视觉中,目前有哪些经典的目标跟踪算法?
- 论文简述 | Voxel Map for Visual SLAM
- python中的pickle解析
- Oracle 左连接(+)加号用法及常用语法之间的关系
- Python学习 5day__基础知识