不懂就问:工作流是什么?其用途是什么?

2021-05-10 08:56:29 +08:00
 tctc4869

偶然间看过一些所谓工作流的框架,简单看了一下文档,但没有起个项目具体编写过代码学习。工作流的本质是什么,

工作流的目的是干什么?是为了简化某些类型的功能定制开发成本吗?

工作流最简单的表现是什么?数字数组?字符串数组? xml ?最高级最有逼格的表现是流程图设计吗?

工作流与可视化开发有什么区别吗?

6033 次点击
所在节点    程序员
20 条回复
tinyuu
2021-05-10 09:07:13 +08:00
参考钉钉、 飞书中的审批流程
lqw3030
2021-05-10 09:17:00 +08:00
通过配置实现复杂业务场景下 if else 拼接
murmur
2021-05-10 09:17:23 +08:00
工作流是审批用的,你可以理解成流程图,但是国内的工作流比流程图复杂的多
kop1989
2021-05-10 09:24:26 +08:00
1 、工作流本质上是单据的可配置流转。

2 、目的是实现可配置的、灵活的单据流转流程,以节省开发工作量。

3 、表现方式很多,比如选择节点处理人,流程图,拖拉拽等等。

4 、可视化开发是开发层面的,工作流是使用层面的(用户层面的)。
CodeJr
2021-05-10 09:26:51 +08:00
解耦配置流程,方便流程的变动
312ybj
2021-05-10 09:39:42 +08:00
工作流主要是为了提高企业的流程流转效率,activity 和 flowable 都是基于 Bpmn2.0 协议的,表现为 xml,但是人家有渲染引擎解析 xml 。 设计流程图肯定是图形化页面化,自己生成 xml,然后套用这个 xml
weizhen199
2021-05-10 10:24:15 +08:00
用途是写代码的不用手艹流程了
taowen
2021-05-10 10:27:21 +08:00
用 PHP 代码写死的流程,要改就得找程序员。工作流的目的是让最终用户参与逻辑的编写,把一部分代码逻辑推迟到运行时去定义。
minbaby
2021-05-10 10:42:20 +08:00
工作流( Workflow ),是对工作流程及其各操作步骤之间业务规则的抽象、概括描述。工作流建模,即将工作流程中的工作如何前后组织在一起的逻辑和规则,在计算机中以恰当的模型表达并对其实施计算。工作流要解决的主要问题是:为实现某个业务目标,利用计算机在多个参与者之间按某种预定规则自动传递文档、信息或者任务。

工作流管理系统( WfMS )是处理工作流的电脑软件系统,其主要功能是通过计算机技术的支持去定义、执行和管理工作流,协调工作流执行过程中工作之间以及群体成员之间的信息交互。工作流需要依靠工作流管理系统来实现。

工作流属于计算机支持的协同工作( CSCW )的一部分。后者是普遍地研究一个群体如何在计算机的帮助下实现协同工作的。


参见: https://zh.wikipedia.org/w/index.php?title=工作流
SlipStupig
2021-05-10 10:45:22 +08:00
工作流的本质就是:把大象装到冰箱里需要几步?需要哪些步骤
tctc4869
2021-05-10 11:09:47 +08:00
@weizhen199 那哪些类型的流程实现的代码可以被工作流替代?哪些流程不能用工作流实现?
timethinker
2021-05-10 11:20:14 +08:00
我之前集成过 Activiti,本质上它就是一个有限状态机,使用它的目的就是为了应对频繁变更的审批流程。

既然是状态机,就涉及到状态节点的切换,即触发了什么事件(输入)导致状态进入到下一个状态(输出),每一个状态节点拥有生命周期,hook 节点生命周期的不同阶段用来处理自定义的逻辑,并且可以控制状态机的走向。节点有不同的类型,有些内置类型的节点,例如进入到这个节点就发送一封邮件,发送完以后进入到下一个节点。

对于我刚才说的以上这些功能,实际上就是一个流程的定义,这个定义不是通过我们写代码的方式来硬编码的,而是在运行时进行管理的,而这个定义也有一个标准( bpmn )用于规范整体的结构。

流程定义完成以后,下一步就是考虑如何将定义“实例化”,流程定义只是一个静态模板,它是元数据(即描述数据的数据),就像我们写一个 Java 类,是需要被实例化的。启动一个流程定义相当于创建了一个流程实例,每一个流程实例具有生命周期,从开始节点一步一步往下走,直到走到了结束节点。

Activiti 或者 Flowable (推荐)非常方便进行拓展,它完成了我们上面所说的那些基础功能(流程定义与部署、实例状态管理等等),我们可以自己按照需要进行定制化的开发。特别需要注意的就是,在使用上,不要把流程实例当做一个业务实体来用(例如你有 10W 个订单,但是里面未完成的订单也许只有几百个),每一个流程实例都有自己的生命周期,当它完成了以后,它的使命也就结束了,在 Activiti 中将会从 RU_XXX 系列表中移除,不过我们可以对其进行拓展,将它的结果存储到外部的一个归档数据库中。

对于简单一点的场景,例如所有的节点都是 UserTask (通常用于审批),可能自己设计一张表就结束了,压根用不到工作流引擎。但是对于以事件驱动的整个集成系统来说还是有意义的,特别是对于频繁变更的流程。
ReferenceE
2021-05-10 11:25:21 +08:00
去用一个 gayhub 免费的 GitHub actions 看看
imn1
2021-05-10 13:01:56 +08:00
任何事情(工作)都可以以工作流方式描述,所以工作流实际上就是个抽象概念
例如晚餐:厨房卫生、采购食材、预处理食材、厨具准备、烹饪、餐厅卫生、餐具准备、餐桌准备、入席、就餐、离席、餐桌清理、餐具清理、厨具清理、厨余处理、餐厅和厨房保洁……
这些步骤哪些是有先后的,哪些可以并行,然后根据可行情况单线程、多线程、协程等等组织完成

一个项目少不了立项、事前评估、审批、筹备、执行或长期执行、事后或定期评估……就形成项目管理这个工作流

工作流的本质就是用有限的“描述方式”,说清各种千变万化的具体工作,让相同或相似的工作更顺利
既然是抽象,就一定是把可变项抽离,例如“imn1 在 hh:mm:ss 对 LZ 回帖 xxxx 内容”,抽象成“水军甲在主角出场后大肆抨击”,把具体的某个人工作,抽象成岗位的工作描述

工作流的目的就是传导(让多次的工作遵循某种特定的模式)
之前说过一句话,这里也可以用,“所谓传承,就是想把自己的感受传给别人,但感受本身是无法传导的,只能传导如何再现这种感受的方法”
工作流也一样,今天的晚餐感受,明天就不同了,所以无法把这种感受保留,但可以保留今天晚餐的做法,留待下次重新体会。工作流就是这个意思,把一个或多个具体的工作,抽象为工作流,那么别人(或者今后的自己)用这种工作流记录,就能相对顺利完成相同或相似的工作

描述李白写诗前喝了多少酒,酒是多少度,那是故事,但“喝完酒写诗”就是工作流,够简单了吧。但你也该看出来了,没有最简单,只有事情的大小,小事情工作流就少,简单;但大项目,工作流就复杂,工序繁多

至于计算机的工作流术语,楼上各位都说得比我清楚,但我想说的是,结合上面的说明,如果你是个擅长写抽象类的高手,你就能写出工作流代码,去想哪个能写工作流不对,而是该想:这个怎么写成工作流
tankren
2021-05-10 13:07:50 +08:00
同一个术语放在不同的场景代表的东西可能不一样
tctc4869
2021-05-10 13:17:28 +08:00
@murmur

比如 liteflow ?
clf
2021-05-10 14:05:50 +08:00
目前主要是为数字化办公服务的。比如请假,你提了请假流程,你的请假信息在流转到人事的时候就会进考勤系统里自动算工资了。还有就是电子签章、合同审批等等配合使用。

很多事情都是有一个步骤的,而这个步骤抽象后就是工作流。
zjsxwc
2021-05-10 16:17:56 +08:00
推荐 https://github.com/lanyulei/ferry

用 go 写的 web 工作流管理工具
xiaoxinshiwo
2021-05-11 16:06:23 +08:00
做过 OA 的估计会知道
wangxiaoaer
2022-09-22 08:53:19 +08:00
@timethinker 老哥,有没有时间帮忙看看这个问题:

https://www.v2ex.com/t/873758#reply1

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/775907

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX