【杂记】“工作流”不完全认知

软件工程中“工作流”到底是什么?

这篇是写给FF的,其实我也不确定我对于工作流的认知是否正确,即使正确,也是非常肤浅的。但我还是把我认为的工作流写出来了,希望能够对你有所帮助。如果正在读这篇文章的你发现了本文的错误,或者有更深的见解,请务必将想法写在评论区,大家一起交流学习。好了废话不多说,我们开始。

从一张图开始

【杂记】“工作流”不完全认知

这张图是工作流的参考模型,和书上是一样的。假设我们要开发一个吃饭的程序,内容是这样的:

  • 老师吃饭:进食堂–>领取餐券–>到自助餐区打饭–>回到大厅吃饭–>去餐盘回收处–>洗手;
  • 学生吃饭:进食堂–>到窗口打饭–>回到大厅吃饭–>去餐盘回收处–>洗手;

可以发现老师和学生在吃饭的流程上是不同的,进食堂、回到大厅吃饭、去餐盘回收处、洗手这些是公共的,还有一些不同,那怎么实现呢?

当然这个程序可以写死,函数一环扣一环,但是如果万一哪天学生也可以零餐券免费吃饭了,不是要改程序?这个很麻烦,所以可不可以把“进食堂”、”领取餐券“这些功能分别实现,然后用另外一个函数去控制它的流程呢?可以尝试一下:

1、建立一个角色表(图中为组织建模),包含:ID;角色名。这样让程序知道当前是谁在用
2、建立一个事件表(图中的工作列表),包含:ID;工作名。这样让程序知道有哪些活动,如“打饭“、”洗手”。
3、建立一个流程表(图中为控制数据),包含:当前事件ID;下个事件ID,角色ID。这个表是最重要,他控制着整个程序的流程,若流程有变,则直接改这个表就行。
4、写一个流程控制器(图中为列表控制器),这是一个方法或函数,他的作用是查找下一步该做什么。

举个例子:
角色表

ID 角色名
1 学生

事件表

ID 工作名
1 窗口打饭
2 领取餐券
3 回到大厅吃饭

流程表

当前事件ID 下个事件ID 角色ID
1 3 1

流程表中的一项指的是学生,窗口打饭后需要回到大厅吃饭。

流程控制器的功能是再每次活动变更的时候去查这个表,如果当前事件是1,角色是学生,那么返回一个事件3。程序就去调用事件3的方法就行了。如果需要改流程,那直接改这个表就行。比如把下一个事件改成2。那么学生大完饭就去领餐券了。不需要修改程序,程序是由流程控制器分配的。

图中还有很多的项目:
相关数据: 这个是实现某个活动的具体内容数据,比如打饭到底有哪些菜……这个不算是与流程相关的表。