极简Java工作流概念入门(极简风格设计概念)

宋哥更新了几篇关于Flowable的文章,但考虑到有些朋友可能从来没有接触过流程引擎,所以我和朋友整理了一些基本的内容。1. 宋哥把之前的文章转发到朋友圈后,有朋友评论说一直不明白为什么

宋哥更新了几篇关于可流动的的文章,但考虑到有些朋友可能从来没有接触过流程引擎,所以我和朋友整理了一些基本的内容。

1. 为什么需要工作流

宋哥把之前的文章转发到朋友圈后,有朋友评论说,他们一直不明白为什么需要工作流。今天我们先来谈谈这个话题。

假设我有一个请假申请,流程如下:

可以提交给我的主管,主管可以选择批准或者不批准,不管批准还是不批准都会给我一个通知。

这个过程比较简单,我们很容易想到解决方案。它可以在没有工作流的情况下解决。有一张特殊的请假表。当A想要请假时,他会在请假单上添加记录。该记录的内容包括请假天数、请假原因、请假审批人B和一个名为status的字段,该状态字段表示休假申请的当前状态(待批准、批准或拒绝),然后在B登录系统后,在请假表单arrival at a ’s请假信息中查询,然后选择批准,然后只需更改状态字段的值。

这个过程很简单,相信大家都能想到。

然而,这是一个非常简单的过程。一般来说,在这样的过程中确实没有必要使用工作流,但实际上,我们所涉及的工作流往往是非常复杂的。让我给你举个例子,就说报销审批,这可能很多朋友都经历过。

朋友们看得出来,这个过程比较复杂。这时,如果您使用状态字段来描述它,就很难判断发生了什么。每个审批步骤都可以被批准或拒绝。拒绝并不意味着这个过程的结束。员工修改了报销信息后,可以继续提交。如果此时仍然用status来描述,那么status就会有超过N个值来表示不同的情况,维护起来非常不方便。

这复杂吗?不,让我们看看生产笔记本电脑的另一个例子。假设公司开发了一种新型笔记本电脑。从R&D到制作的整个过程可能是这样的:

与上面两个相比,这个更加复杂。不仅有串行任务,也有并行任务。如何设计这样一个系统?显然,仅仅通过状态字段进行描述是不够的。这时,我们必须考虑一个通用的、易于维护的解决方案来实现这样一个系统。这个通用且易于维护的解决方案就是工作流。

2. 三个主要工作流程

一个相对较早的工作流是jBPM,它是由Java实现的企业级流程引擎,是JBoss开发的产品之一。

jBPM的创造者是Tom Baeyens,他后来离开JBoss加入Alfresco,推出了基于jBPM4的开源工作流系统Activiti,而jBPM在后续的代码中完全放弃了jBPM4的代码。从这个过程中也可以看出,在jBPM的开发过程中,由于意见不合,后来变成了两个jBPM和Activiti。

然而,戏剧性的事情是,Activiti5并没有持续多久,卡蒙达从Activiti中分离出来,Activiti继续发展,可流动的从它中分离出来…

由于开发jBPM、Activiti、卡蒙达和可流动的的人或多或少有关联,人们不得不猜测,是他们的企业文化导致他们意见不同,并拉着一群人单独工作。

所以现在市场上有三种主流的过程引擎:

  • Activiti
  • 可流动的
  • 卡蒙达

这三者各有特点:

  1. Activiti目前专注于云,其当前的设计将向Spring cloud和Docker靠拢。
  2. 可流动的的核心思想仍然是成为一个功能丰富的过程引擎工具。除了最基本的工作流之外,它还提供了许多其他扩展点。我们可以基于可流动的实现许多我们想要的功能(当然,这也是一个小伙伴。我们发现可流动的使用起来很复杂的原因之一)。
  3. 与前两款相比,卡蒙达的重量相对较轻。卡蒙达’的独特特性之一是它提供了一个基于bpmn的小型编辑器。io(宋歌之前已经发布过了)。如果您的项目需求是一个具有嵌入式工作流的轻量级、灵活和高度可定制的编辑器,那么您可以选择卡蒙达。

如果你仔细比较这三者之间的差异,你可以做出一个长表。网上很多人都有总结,这里宋哥就不多说了。

3.流程图

既然有三个不同的工作流程,那么由这三个不同的工作流程绘制的流程图是否不同?

不。

工作流程图实际上有一个统一的标准,那就是BPMN。BPMN的全称是业务流程模型和符号(Business Process Model and Notation),中文翻译为业务流程模型和符号。这个中文太复杂了,所以简称为BPMN。

这是一组以图形方式表示业务流程模型的图形符号。BPMN最初是由业务流程管理计划(BPMI,业务流程管理计划)开发的。BPMI在2005年与对象管理组(OMG,对象管理组)合并,OMG在2011年1月发布了2.0版本。同时,它被改为现在的名字。

总之,对于流程图有一个特别老的规范,那就是BPMN,我们前面说过,无论是Activiti、可流动的还是卡蒙达,都支持这个规范,所以无论您使用哪个流程引擎,都可以使用相同的流程图集。

那么这个规范到底说了什么呢?

让我们以以上笔记本生产流程图为例,给我们的朋友简单介绍一下:

从上图可以看出,流程图主要包括四个方面:

  • 事件
  • 连接
  • 任务
  • 网关

让我们一个一个地谈谈。

事件

首先,流程图中应该有一个开始事件和一个结束事件,也就是你在上图中看到的两个圆。此外,还有一些中间项目、边界项目等。举一个中间计时事件的例子。例如,在用户下订单后,可能会出现一个中间计时事件,将交付延迟5分钟。

连接

连接是连接事件、任务、网关等的线。一般是正常的连接,有时连接是有一定条件的,比如前文宋哥分享的请假申请,如果经理同意请假,走哪条线,如果经理不同意请假,走哪条线。对应上图的笔记本生产,如果经理批准,加载图纸准备生产,如果经理不批准,重新设计。

任务

实际上任务有很多种。

如果细分可以大致分为以下几类:

  • 接受任务

在上面的流程图中,等待准备完成的项是接收任务。在此任务中不需要做任何额外的操作,流程将在此步骤自动停止,需要手动单击以推动流程继续向下。

  • 发送任务

这通常用于向外部参与者发送消息。

  • 服务任务

这通常由系统自动完成。事实上,说白了,它是我们的定制类之一,它可以在定制类中完成您想要做的事情。

  • 脚本的任务

自动化的活动。当流程执行到一个脚本任务时,相应的脚本将自动执行。

  • 业务规则任务

BPMN2.0是新引入的,用于连接到业务规则引擎,业务规则任务用于同步执行一条或多条规则。

  • 用户任务

用于模拟需要由人类演员完成的工作。

虽然有很多细分类别,但如果你仔细观察,这些类型可以分为两类:

  1. 用户任务:指示人工干预要做什么。例如,是否同意,或者输入一些参数。为了让人们完成任务,需要一个表单系统来允许人们输入数据或显示数据供人们查看。这就是为什么要将用户任务和表单系统结合起来。用户任务用户需要向引擎提交一个操作来完成任务,否则进程将在这里暂停并等待。
  2. 服务任务:表示机器自动执行的任务。调用服务的任务,该服务可以是Spring JavaBean,也可以是远程REST服务,流程将自动执行该服务任务。

活动

活动可以被认为是一种特殊的任务。活动可以调用另一个流程作为当前流程的子流程运行。活动还可以分为用户活动、脚本活动等。从视觉上看,活动的边界比任务更暗。这# 8217;年代。

网关

如果对网关进行细分,则有许多不同类型的网关。

  • 互斥网关

这种网关也被称为独占网关。我们前面的休假流程中的网关是一个互斥的网关。此网关有且只有一个有效出口。

  • 兼容的网关

这种网关会有多个出口,只要满足条件,就会全部执行。

  • 事件网关

事件网关由一个中间事件驱动,该事件在它所等待的事件发生后触发决策。基于事件的网关允许基于事件做出决策。

  • 并行网关

并行网关通常成对出现。在上述笔记本生产过程中,通过并行网关实现生产屏幕、键盘等并行操作。

这些是过程引擎的一些基本概念。在理顺了这些基本概念之后,在回顾了我们之前关于流程引擎的文章之后,您应该有了一些不同的理解:

  • Spring Boot集成了流程引擎可流动的,非常简单!
  • SpringBoot+Vue+可流动的,模拟假期审批流程!
  • 49张图片带领朋友体验flow - ui
  • Spring Security + Vue + 可流动的是如何工作的?
JAVA

5分钟掌握Bloom滤镜(古驰bloom香水)

2023-1-18 13:38:19

JAVA

Tomcat源代码学习Part 3 –引导启动过程(tomcat启动过程详解)

2023-1-18 13:40:03

0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧
个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索