工作流引擎架构设计

一个应用MIS的系统的架构离不开工作流引擎,具有流程引擎思维的架构人员设计系统的时候就有流程的思维,他区别于过程思维,过程思维开发出来的系统,用户面对的是菜单、模块。而流程思维设计出来的系统就是发起、待办、在途、查询、近期等菜单,用户使用起来比较清爽、容易培训、学习成本低。比如:我们做一个工单系统,如果采用流程思维则创建通过创建一个工单流程,然后设计表单即可,如下图:

(流程引擎:流程设计器)

(表单引擎:表单设计器)

所有说软件系统的架构需要一个工作流引擎支撑系统的开发,您设计的系统就是面向流程的系统,在业务变化的时候,您可以随时调整,使用较小的成本来开发您的系统。

但随着同类需求不断增多,于是开始了工作流引擎的开发之路。查找了一些资料之后,开发了现阶段的工作流引擎,文章后面会有介绍。

虽然现在基本上能满足日常的需求,但感觉还不够智能,还有很多的优化空间,所以正好借此机会,详细了解了一些完善的工作流引擎框架,以及在架构设计上需要注意的点,形成了这篇文章,分享给大家。

  1. 什么是工作流

先看一下维基百科对于工作流的定义:

工作流(Workflow),是对工作流程及其各操作步骤之间业务规则的抽象、概括描述。工作流建模,即将工作流程中的工作如何前后组织在一起的逻辑和规则,在计算机中以恰当的模型表达并对其实施计算。

工作流要解决的主要问题是:为实现某个业务目标,利用计算机在多个参与者之间按某种预定规则自动传递文档、信息或者任务。

简单来说,工作流就是对业务的流程化抽象。WFMC(工作流程管理联盟) 给出了工作流参考模型如下:

举一个例子,比如公司办公的 OA 系统,就存在大量的申请审批流程。而在处理这些流程时,如果每一个流程都对应一套代码,显然是不现实的,这样会造成很大程度上的代码冗余,而且开发工作量也会骤增。

这个时候就需要一个业务无关的,高度抽象和封装的引擎来统一处理。通过这个引擎,可以灵活配置工作流程,并且可以自动化的根据配置进行状态变更和流程流转,这就是工作流引擎。

  1. 简单的工作流

那么,一个工作流引擎需要支持哪些功能呢?

这个问题并没有一个标准答案,需要根据实际的业务场景和需求来分析。在这里,我通过一个工单流程的演进,从简单到复杂,循序渐进地介绍一下都需要包含哪些基础功能。

  1. 最简单流程:

最简单的一个流程工单,申请人发起流程,每个节点审批人逐个审批,最终流程结束, 在ccflow看来,属于线性流程,每个节点都是线性节点,他是一条线。流程启动后,在一个时间点上,只有一个节点是活跃的。

  1. 会签定义

在这个过程中,节点分成了两大类:简单节点和复杂节点。简单节点处理逻辑不变,依然是处理完之后自动到下一个节点。复杂节点比如说会签节点,则不同,需要其下的所有子节点都处理完成,才能到下一个节点,在ccflow的概念里,属于同表单分合流、或者异表单分合流。

  1. 并行定义

如下并行流程图:

同样属于复杂节点,其任何一个子节点处理完成后,都可以进入到下一个节点。在ccflow概念中节点上多人处理规则中的协作模式,当前节点所有的人都完成后,由最后一个人发送到下一个节点上去,我们称为会签节点。

  1. 条件判断定义

需要根据不同的表单内容进入不同的分支流程,举一个例子,比如在进行休假申请时,请假一天需要直属领导审批,如果大于三天则需要部门领导审批。

在ccflow的概念中,方向条件分为表单字段、用户身份、用户部门、API、流程系统参数等,一个灵活高可配置的系统,需要支持多中场景,才能减少代码的开发。

  1. 动态审批人定义

审批节点的审批人需要动态获取,并且可配置。

审批人的获取方式可以分以下几种:

  1. 固定审批人
  2. 从申请表单中获取
  3. 根据组织架构,动态获取
  4. 从配置的角色组或者权限组中获取
  1. 撤销和驳回

节点状态变更可以有申请人撤回,审批人同意,审批人驳回。那么在驳回时,可以直接驳回到开始节点,流程结束,也可以到上一个节点。更复杂一些,甚至可以到前面流程的任意一个节点。在ccflow的概念中,撤销是发送人主动执行的动作,驳回责任处理人退回的动作。

  1. 自动化节点

有一些节点是不需要人工参与的,比如说联动其他系统自动处理,或者审批节点有时间限制,超时自动失效,自动化节点需要服务来支持,在ccflow的概念中,可以在节点属性的谁执行它,可以设置机器执行节点。

  1. 个性化通知

节点审批之后,可以配置不同的通知方式来通知相关人。

以上是我列举的一些比较常见的需求点,还有像加签,代理,脚本执行等功能,如果都实现的话,应该会是一个庞大的工作量。当然了,如果目标是做一个商业化产品的话,功能还是需要更丰富一些的。但把这些常见需求点都实现的话,应该基本可以满足大部分的需求了,至少对于我们系统的工单流程来说,目前是可以满足的。

  1. 工作流引擎对比

既然这是一个常见的需求,那么需要我们自己来开发吗?市面上有开源项目可以使用吗?答案是肯定的,目前,市场上比较有名的开源流程引擎有 Osworkflow、Jbpm、Activiti、Flowable、Camunda, CCFlow,JFlow 等等。其中:Jbpm、Activiti、Flowable、Camunda 四个框架同宗同源,属于国外的工作流引擎。CCFlow,JFlow是国产的工作流引擎,它集成的自己研发的表单引擎,融合了MIS系统开发中,业务流程、公文流程、工业流程下的多种业务规则,让其设计更具有适应性。流程引擎、表单引擎、数据、用户之间的关系,类似于车的控制系统、车厢、数据、操作员,如下图所示。

(图:流程引擎、表单引擎、业务数据、操作员的关系)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/213874.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

解决Spring Boot应用在Kubernetes上健康检查接口返回OUT_OF_SERVICE的问题

现象 在将Spring Boot应用部署到Kubernetes上时,健康检查接口/healthcheck返回的状态为{"status":"OUT_OF_SERVICE","groups":["liveness","readiness"]},而期望的是返回正常的健康状态。值得注意的…

APP软件外包开发需要注意的问题

在进行APP软件开发时,有一些关键问题需要特别注意,以确保项目的成功和用户满意度。以下是一些需要注意的问题,希望对大家有所帮助。北京木奇移动技术有限公司,专业的软件外包开发公司,欢迎交流合作。 清晰的需求定义&a…

2023年中国数字疗法行业研究报告

第一章 行业概况 1.1 定义 数字疗法(Digital Therapeutics,简称DTx)正日益成为医疗保健行业的革命性力量,其定义和范畴根据国际数字疗法联盟(Digital Therapeutics Alliance,DTA)的阐述&#…

自监督LIGHTLY SSL教程

Lightly SSL 是一个用于自监督学习的计算机视觉框架。 github链接:GitHub - lightly-ai/lightly: A python library for self-supervised learning on images. Documentation:Documentation — lightly 1.4.20 documentation 以下内容主要来自Documen…

成为AI产品经理——模型评估指标

目录 一、模型评估分类 1.在线评估 2.离线评估 二、离线模型评估 1.特征评估 ① 特征自身稳定性 ② 特征来源稳定性 ③ 特征成本 2.模型评估 ① 统计性评估 覆盖度 最大值、最小值 分布形态 ② 模型性能指标 分类问题 回归问题 ③ 模型的稳定性 模型评估指标分…

c语言十进制转二进制

以下是一个将十进制数转换为二进制数的C语言代码示例&#xff1a; #include <stdio.h>void decimal_to_binary(int decimal) { int binary[32]; int i 0; while (decimal > 0) { binary[i] decimal % 2; decimal / 2; i; } pr…

java设计模式学习之【工厂模式】

文章目录 引言工厂方法模式简介定义与用途&#xff1a;实现方式&#xff1a; 使用场景优势与劣势工厂模式在spring中的应用电费计算示例&#xff08;简单工厂模式&#xff09;改善为方法工厂模式代码地址 引言 在软件开发的世界中&#xff0c;对象的创建可能是一个复杂且重复的…

星河创新,开拓新纪!2023“星河产业应用创新奖”报名全面开启!

科技的浪潮汹涌而至&#xff0c;人工智能正悄无声息地渗透进我们生活的每一个角落&#xff0c;成为推动社会奔腾向前的强大引擎。 随着大模型时代到来&#xff0c;更多的创新者涌现出来&#xff0c;他们正积极探索AI与实体的深度融合&#xff0c;解决行业难题&#xff0c;开拓…

js检测dom变化的方法:MutationObserver

前言 检测一个原生dom的变化,如一个div的颜色,大小,所在位置,内部元素的属性是否变化,更深层dom树上的变化等等。 都可以使用一个window上暴露出来的一个api:MutationObserver 语法 官方地址:MutationObserver.MutationObserver() - Web API 接口参考 | MDN 使用new Mutat…

查询Greenplum的视图和存储过程,指定schema

查询视图 SELECT schemaname,viewname AS view_name, definition AS view_definition FROM pg_views WHERE schemaname dcf_user; 查询存储过程 SELECT a.proname ,a.prosrc ,b.rolname FROM pg_proc a left join pg_roles b on a.proowner b.oid where b.rolname dcf…

打印菱形-第11届蓝桥杯选拔赛Python真题精选

[导读]&#xff1a;超平老师的Scratch蓝桥杯真题解读系列在推出之后&#xff0c;受到了广大老师和家长的好评&#xff0c;非常感谢各位的认可和厚爱。作为回馈&#xff0c;超平老师计划推出《Python蓝桥杯真题解析100讲》&#xff0c;这是解读系列的第9讲。 打印菱形&#xff…

Django框架之中间件

目录 一、引入 二、Django中间件介绍 【1】什么是Django中间件 【2】Django中间件的作用 【3】示例 三、Django请求生命周期流程图 四、Django中间件是Django的门户 五、Django中间件详解 六、中间件必须要掌握的两个方法 (1) process_request (2) process_respon…