状态机/流程引擎/审批流的流程引擎/结合低代码开发的流程引擎 区别 业务系统中使用流程引擎「建议收藏」

状态机/流程引擎/审批流的流程引擎/结合低代码开发的流程引擎 区别 业务系统中使用流程引擎「建议收藏」业务中利用流程引擎可以解耦.但坏处是有一天流程引擎无法满足新功能的时候,开发工作量比较大.有遇到过一个特殊的case.乘客和司机,垫付场景.本来,乘客支付后分润给司机.两个行为时顺序的.后续变更,新增平台垫付.乘客支付和司机垫付两个行为即不是平行的,也不是互斥的,乘客支付排斥垫付,但是垫付不排斥乘客支付,且要对乘客支付进行延迟判断.业务逻辑

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE稳定放心使用

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

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

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

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

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

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

状态机/流程引擎/审批流的流程引擎/结合低代码开发的流程引擎 区别 业务系统中使用流程引擎「建议收藏」

状态机 – 难扩展 不推荐

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

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

普通流程引擎

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

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

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

  在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.  乘客支付,然后分润. 垫付不需要执行了.

     如何建模?

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

    

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

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/179810.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • html背景图片的设置宽高_网页的背景图片怎么设置

    html背景图片的设置宽高_网页的背景图片怎么设置背景图片的设置,背景图片大小、位置、是否重复以及附着点的问题

    2022年10月5日
    3
  • springboot集成dubbo的配置(dubbo项目如何部署)

    1.Dubbo框架Dubbo框架是一个高性能、重量轻、基于java的RPC框架。Dubbo提供了三个关键功能,包括基于接口的远程调用、容错和负载平衡,以及自动服务注册和发现。Dubbo可以和Spring框架无缝集成。官方的Dubbo框架如下图所示:其核心部分包含:1.远程通讯:提供对多种基于长连接的NIO框架抽象封装,包括多种线程模型,序列化,以及“请求-响应”模式的信息交换方式。2.集群容错:提供基于接口方法的透明远程过程调用,包括多协议支持,以及软负载均衡…

    2022年4月16日
    46
  • date和localdatetime转换_date和localdatetime

    date和localdatetime转换_date和localdatetime/***Date转换成LocalDate*@paramdate*@return*/publicstaticLocalDatedate2LocalDate(Datedate){if(null==date){returnnull;}returndate.toInstant().atZone(ZoneId.systemDefault()).toL..

    2022年10月3日
    2
  • 清除Dns缓存_怎么清除ip地址缓存

    清除Dns缓存_怎么清除ip地址缓存MAC:sudodscacheutil-flushcacheLinux:dnsmasq的是一个轻量级的DNS、TFTP和DHCP服务器。它的目的是给局域网提供配对的DNS和DHCP服务。d

    2022年8月3日
    5
  • Python全栈工程师(集合、函数)

    Python全栈工程师(集合、函数)ParisGabrielParisGabriel感谢大家的支持你们的阅读评价就是我最好的动力我会坚持把排版内容以及偶尔的错误做的越来越好每天坚持一天一篇点个订阅吧灰常感谢当个死粉也

    2022年7月5日
    25
  • 软件工程:数据流图和结构图怎么画?

    软件工程:数据流图和结构图怎么画?文章目录Step1:根据软件的功能描述,绘制数据流图:Step2:根据数据流图,分级绘制结构图:•边界划分:•第一级分解:•第二级分解:•精化减少耦合:Step1:根据软件的功能描述,绘制数据流图:问题表述:假设的仪表板将完成下述功能:(1)通过模数转换实现传感器和微处理机接口;(2)在发光二极管面板上显示数据;(3)指示每小时英里数(mph),行驶的里程,每加仑油行驶的英里数(mpg)等等;(4)指示加速或减速;(5)超速警告:如果车速超过55英里/小时,则发出超速警告铃声。首先了

    2022年6月15日
    86

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号