不懂就问:工作流是什么?其用途是什么? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
请不要在回答技术问题时复制粘贴 AI 生成的内容
tctc4869
V2EX    程序员

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

  •  
  •   tctc4869 2021-05-10 08:56:29 +08:00 7184 次点击
    这是一个创建于 1615 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

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

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

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

    第 1 条附言    2021-05-10 11:08:38 +08:00
    有哪些类型的功能是可以工作流可以完成的,有哪些类型的功能是不能用工作流完成的?
    20 条回复    2022-09-22 08:53:19 +08:00
    tinyuu
        1
    tinyuu  
       2021-05-10 09:07:13 +08:00
    参考钉钉、 飞书中的审批流程
    xyooyx
        2
    xyooyx  
       2021-05-10 09:17:00 +08:00
    通过配置实现复杂业务场景下 if else 拼接
    murmur
        3
    murmur  
       2021-05-10 09:17:23 +08:00
    工作流是审批用的,你可以理解成流程图,但是国内的工作流比流程图复杂的多
    kop1989
        4
    kop1989  
       2021-05-10 09:24:26 +08:00   1
    1 、工作流本质上是单据的可配置流转。

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

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

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

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

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


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

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

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

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

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

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

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

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

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

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

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

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

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

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

    t/873758#reply1
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     3882 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 25ms UTC 05:13 PVG 13:13 LAX 22:13 JFK 01:13
    Do have faith in what you're doing.
    ubao snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86