V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
• 请不要在回答技术问题时复制粘贴 AI 生成的内容
tctc4869
V2EX  ›  程序员

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

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

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

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

    工作流最简单的表现是什么?数字数组?字符串数组? 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
    参考钉钉、 飞书中的审批流程
    lqw3030
        2
    lqw3030  
       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 老哥,有没有时间帮忙看看这个问题:

    https://www.v2ex.com/t/873758#reply1
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   982 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 26ms · UTC 18:59 · PVG 02:59 · LAX 10:59 · JFK 13:59
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.