理念 - 反对用模板,用流程引擎实现业务

先强调一点. 业务系统, 要学习 ,反对用模板,用流程引擎实现业务. 除非有人参与,必须用流程引擎,不然不要用状态机or流程引擎, 不要用. 但是要学习流程引擎,只是让自己有流程意识,但不用用来实现业务. 业务系统维护同学换来换去,刚记牢每个handler之间的关系,就换系统了. java 强类型之所以变成企业首选, 就是因为强类型 , 可以顺着代码阅读,理解流程. 代码面前了无秘密. 不仅仅码农在用流程引擎,企业战略和执行也是利用流程引擎的.

如果你用了,注意流程复用,策略点的复用. (本质上内含了 实体复用, 抽象父类)

会导致流程模板的嵌套. 例如某个业务流程有很多, 需要依赖某个业务的一个流程.

方案一: 引擎type法. 在processTemplate的某个processor通过某个type处理不同的业务. 也可以通过mq异步化解耦.

方案二: 组合法. 另外一个模式是 组合模式. 在入口处先判断业务. 使用不同的业务实体/流程. 里面当前实体的processor里调用复用流程的processTemplate执行

状态机 - 难扩展 不推荐

没有流程引擎前的弱版流程引擎. 必须要有状态,状态即节点.
= 流程 + 状态

process 和event配置在一个类里或者 xml里, 固化,后期如果有复杂流程的处理的话,就比较难扩展.

普通流程引擎

= 流程+节点+状态+布尔值

activiti这种, 可以配置流程,继续执行的策略. 配置对应的触发event和handler类. 每个流程实例会保存到数据库中.当有对应实例id的event到来时,
流程:
   1.获取流程实例数据,当前节点 ,
2.结合保存好的模板数据执行(java代码序列化,难复杂) 或者 使用代码中的模板解析后的模板代码执行,判断是否继续执行,
3.如果需要执行,回调代码中的handler. 一种是已序列化好的handler(难,复杂),一种是利用文本代码

下面是一些工作流引擎产品列表:

  • 轻量级工作流引擎,如:Camunda,Activiti,JBoss jBPM。
  • BPM套件遵循“零代码”方法,如:IBM,Pega,Software AG。
  • 带DSL的纯状态机,如:Amazon Simple Workflow,Netflix conductor。
  • 简单的“事件反应机器”,如:IFTTT,Zapier,Microsoft Flow。
  • 大数据或ETL的数据流框架,如:Spring Cloud数据流,Apache Airflow。

  在BPM领域有一个标准的图形化符号语言BPMN,遵循零代码或少写代码的宗旨,BPMN 2.0以后融入了BPEL,从而实现人工流和服务流程的综合调度编排。

工作流与BPM -解道Jdon

BPM有很多种建模语言,BPMN(Business Process Modeling Notation)就是其中的一种建模语言。 深入浅出了解BPM、BPMN、BPMN2.0 - 纪晓元 - 博客园

和状态机区别

节点是高于状态  , 举例: 多个分支全部到才能继续走的节点= 状态+几个布尔值. 流程引擎把状态机的流程和状态变成了 流程,节点和状态

优点:

业务中利用流程引擎可以解耦. 流程能比较内聚.  但是状态机还需要自己写,所以可以用内聚的状态机来替代流程模板.

缺点:
        1. 因为某个节点继续执行哪个,或者说用户想要查询其相关的流程实例,哪些状态用户可操作,可执行什么操作.这些都会比较复杂,因为这些操作没有和流程模板一起配置. 所以还是需要有一个status字段.
        2. 因为缺点1,所以状态必须存在,自己维护. 所以内聚/收拢的状态机完全可以替代优点1

审批流的流程引擎

流程模板已经和角色相关,且每个角色可以查询哪些,做一些判断,也配置好了. 所以就比较简单,一般只有审批操作.

优点:

和人,角色概念结合,自动推送给用户,无需额外代码,用户可直接查询,

缺点:
     
每个状态/节点下,场景限制在审批动作,查询简单.   如果还有其他操作,可能就需要特别的状态校验和是否能执行校验了.

前后端统一下低代码平台上的流程引擎

因为低代码平台前后端统一配置. 可以更好的管控流程引擎. 对节点上什么角色可以有什么页面,可以有什么操作,都可以配置出来. 形成前后端闭环. 弱一点的可以通过写自定义函数,或者jar文件的形式来脚本化配置.

节点里不要有代码,最好只有数据. 数据和代码分离的开发模式. mvc就是这种理念.其实前后端分离本来就是这个思路了.vuejs又把这个理念往前迈了一步. 把服务端返回的领域model,变成viewModel,从而数据驱动. 这个viewModel设计的是否简介,比较考察能力. 但是对代码理解可能需要多一步,不那么直观.

缺点:  

目前还没有那么牛逼. 页面自动更换. 前端的页面必须通过status来判断. 除非前端代码都是从节点里自动返回的(已经基于角色和当前节点的状态自动计算出了最终的呈现和按钮. 或者说是 已经基于角色和当前节点的状态自动计算好了对应的Bean,返回给前端,然后结合静态代码渲染. ) (故流程节点必须要能识别uid和对应的uid角色信息.)[可以不用关心通过什么接口获取,这个是前置流程完成的]

配置上相关的决策代码和handler代码少不了,接口调用少不了. 这个是低代码目前难以办到的. 集成很多pom. 低代码如果有一天是一个脚本化/webIde可能还能够办到.

低代码本质上是图形化编写系统,背后肯定要有很多封装,不然只能通过图灵完备的代码语言来补充.     但坏处是有一天流程引擎无法满足新功能的时候,重新开发工作量比较大.
特殊案例 :

有遇到过一个特殊的 case.

乘客和司机, 垫付场景.本来,乘客支付后分润给司机. 两个行为时顺序的.后续变更, 新增 平台垫付. 乘客支付和司机垫付两个行为即不是平行的,也不是互斥的, 乘客支付排斥垫付,但是垫付不排斥乘客支付,且要对乘客支付进行延迟判断.

业务逻辑是:

1.  3天后,如果乘客未支付.那么需要垫付. 然后触发分润,且乘客还是需要支付.

2.  乘客支付,然后分润. 垫付不需要执行了.

如何建模?

这种流程该怎么建模,目前的流程引擎是否支持?

状态机是弱化的流程引擎,触发是有业务系统触发的. 内部没有主动流转机制. 没有状态,联结节点

状态机/流程引擎/审批流的流程引擎/结合低代码开发的流程引擎 区别 业务系统中使用流程引擎相关推荐

  1. 【宜搭】低代码开发师(中级)考试仓库库存管理系统流程

    目标: 根据步骤能快速通过考试 一. 建一个进货登记表 注意点(如图): 公式如下:

  2. 低代码开发流程是怎么样的?

    低代码开发流程是怎么样的?现在很多文章都在下功夫宣传what(低代码是什么).why(为什么要用低代码),但是很少有文章能够系统讨论how(怎么用低代码)的问题. 所以我花3天的时间准备了这篇文章,系 ...

  3. 【企业管理系统】低代码开发平台建模引擎

    "最近管理的供应商越来越多,怎么样可以更便捷一些?"来自采购员朋友的深夜询问. 在疫情的影响下朋友公司开始转型,将业务板块扩张到电商领域,开展国内外电商平台的零售及批发业务,让原本 ...

  4. 业务系统如何集成工作流引擎?

    一般来说,中大型企业基本都有自己成熟的业务系统,只是缺少合适的工作流引擎,这样就只是需要单独集成工作流引擎就可以了,F2BPM可以提供单独的流程引擎集成方案. 那么业务系统如何集成F2BPM流程引擎呢 ...

  5. 老周谈低代码开发平台、工作流引擎、与表单引擎之间的关系

    低代码开发是最近几年比较火的一个概念,而工作流引擎,表单引擎是好多年以前的产物了.今天我们就聊聊三者之间的关系. 我是开源驰骋BPM公司的老周,是bpm系统的爱好者.研发者.探索者. 对上述三个模块问 ...

  6. 阿里开源项目LowCodeEngine低代码开发引擎

    简介 阿里开源低代码开发引擎"LowCodeEngine"项目,市面上低代码引擎开发平台有很多,阿里低代码开发start并不多. 低代码介绍 零代码.低代码的概念在整个全球行业内已 ...

  7. 无代码厂商轻流:“别叫我低代码”

    回望2020年,新冠疫情的爆发,不仅让远程办公.视频会议.直播等数字化应用迅速得到普及应用,也让低代码.无代码开发平台迎来了特别关注.由于疫情的紧急性,很多政府部门或企事业单位需要在两三周甚至一周.一 ...

  8. 给力!低代码开发平台广州流辰信息科技助您增辉创价值!

    低代码平台开发公司流辰信息深耕行业多年,一直以市场为导向,凭借敏锐的市场洞察力砥砺前行.拼搏进取,提升研发创新能力,广州流辰信息科技与各新老客户朋友风雨同舟,携手共创宏伟新蓝图! 一.熔铸前沿科技 共 ...

  9. 低代码之间到底有些什么区别?对比编译型平台“iVX 无远 牛刀”以及接口型平台“明道 宜搭 简道 轻流 氚云 ”

    跟踪研究了很长时间,写一篇文章来和大家分享. 首先,我想说的是,大家不要对"地代码""无代码"有什么偏见,这些都是技术发展的必然,我们只讨论发展的阶段和相关的技 ...

最新文章

  1. 在Matlab中可视化3D体积图像数据,例如MRI图像
  2. Docker构建YApi镜像, Docker安装YApi, Docker部署YApi
  3. 网络通信模型(IO模型)
  4. openresty开发系列22--lua的元表
  5. TortoiseSvn
  6. ArcGIS中合并(merge)、联合(union)、追加(append)、融合(dissolve)的用法区别与联系
  7. centOS 阿里云yum地址配置
  8. 浏览器弹窗怎么设置显示url_谷歌浏览器Chrome76版本地址栏不显示HTTPS和WWW怎么办?...
  9. matlab做经济地理、地理距离、经济距离空间权重矩阵
  10. 超键、候选键、主键区别?
  11. 《德鲁克管理思想精要》读书笔记小结
  12. Excel单元格设置下拉选项
  13. 广义线性模型到底是个什么鬼?
  14. fprint函数与print函数
  15. 利用163 邮箱发送邮件
  16. C/C++编程工具及实用小软件推荐_dvlinker的博客-CSDN博客_编写c++的软件
  17. Unity基础(三)3D场景搭建
  18. 一加3t刷机后还卡_一加 OnePlus 3T手机越来越卡怎么办,手机卡顿怎么解决?
  19. 人工智能正在向经济学领域渗透
  20. 【周末闲谈】什么是云计算?

热门文章

  1. 放松一下——简单的优美动态网页(带背景音乐)
  2. Find My资讯|苹果Find My技术应用于车内丢失设备
  3. SQL查询的时候同时显示明细和总计
  4. linux远程管理工具之tabby
  5. redis操作报错-Unexpected character (‘-‘ (code 45)): Expected space separating root-level values
  6. node--cors
  7. 中国移动Cat.1通信模组-助力快速接入全球高质量LTE网络
  8. android 类似金山词霸 每日一句源代码 csdn,个人作业2——英语学习APP案例分析(示例代码)...
  9. MySQL 使用sum求和
  10. Caffe图片特征提取(Python/C++)