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

Posted 架构文摘

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了惊了,老板要我开发一个工作流引擎!相关的知识,希望对你有一定的参考价值。

点击蓝色“架构文摘”关注我哟

加个“星标”,每天上午 09:25,干货推送!

来源:https://www.cnblogs.com/duck-and-duck/p/14436373.html

第1关

一天,老板找到我,说要做个简单的工作流引擎。
我查了一天啥是工作流,然后做出了如下版本:

惊了,老板要我开发一个工作流引擎!
  • 按顺序添加任意个审批人组成一个链表,最后加一个结束节点

  • 记录当前审批人,当审批完后,审批人向后移动一位

  • 当审批人对应结束节点时,流程结束

老板:简陋了点。

第2关

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

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

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

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

结构上我做了如下调整:

  • 把节点分为两大类:简单节点(上图中长方形)和复杂节点(上图中圆形)。

  • 用一棵树表示整个流程,其中叶子节点都是简单节点,简单节点都是叶子节点。

  • 每个简单节点里都有且仅有有一个审批人。

  • 复杂节点包含若干个子节点。

  • 加入会签节点: 会签节点激活后,所有的子节点都可以审批,当所有的子节点都审批完毕后,会签节点完成。

  • 加入串行节点:子节点只能从左到右依次进行审批,当最后一个子节点审批完成后,串行节点完成。

  • 所有的工作流最外层都是一个串行节点,该节点完成后代表整个工作流完成。
    为了控制审批流程,我设计了一些节点状态:

  • Ready  : 可以进行审批操作的简单节点是Ready状态。

  • Complete  : 已经审批完成的节点状态。

  • Future: 现在还没有走到的节点状态。

  • Waiting  : 只有复杂节点有该状态,表示在等待子节点审批。

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

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

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

老板:有点意思。

第3关

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

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