如何设计一个灵活的审批流程

简介: 如何设计一个灵活的审批流程

背景

    如何选择一个合适的审批流程,决定了业务逻辑的复杂度。因此选择合适的审批实现方式很重要。在售后,流程式的代码也较多,因此需要选择一个合适的方式。


一、需求

比如当前的流程存在多个步骤,每个步骤都需要人审批,此时的设计方案如何设计比较好?


二、方案

方案一:

这种模式适用于固定流程和可变长短流程

是基于当前的步骤,建立审批流,比如Activiti、Flowable或者阿里开源的审批流框架等,这个时候,此时每个判断条件放在审批流的排他网关上,也即左右变量上,解决流程上的繁琐判断。但是这样有一个问题:需要有一个专门管理的审批流来管理流程。由于审批流和角色挂钩,因此不免需要和认证中心做交互。如果当前的审批流程比较长,会出现一个问题,审批中心出现异常,我们的审批信息也需要进行回滚。由于审批中心和业务系统不在同一个服务,属于不同的领域,因此需要使用分布式事务来保证事务。这个成本上,会有点大。通常审批流较短的话,使用审批流框架比较方便。


方案二:

这种模式适应于固定流程和长度可变流程。

采用数据库预置全流程的方式,此时全流程事先插入到数据库,此时每个流程都会带上角色信息、金额、类型信息。也即比如根据金额和类型,查询对应的流程的步骤。然后将其待处理流程插入到数据库中。当轮到那个角色审批的时候,就进行对应的审批行为,进行审批。此时不需要审批流框架的加持也能完成这个过程。


改进方式:

但是这种方案还是不够灵活。由此我想到还有一种方式可以实现这种操作。也即在每次插入数据库前,将每个待审批的流程数据结构设计成json的数据结构,json里面带分支状态,结合状态来判断,这样每次执行完成,再增加一个总的状态,这样每次执行完成,就代表这个过程成功了,否则回退一个状态即可。


由于json数据结构,方便扩展,因此每次操作的过程还可以带上sort这个字段,这样方便排序的同时,还方便状态的标注。


出现异常与方案一相比,方便回滚。不会存在分布式事务的问题。

但是方案二有一个问题,就是出现多分支的时候,需要给定一个排序的字段。借助一些属性信息来区分。但是方案一对于多分支的情况,依然适用。


方案三:

通常基于审批流程,如果是固定的,可以基于责任链模式,来设计审批流程。责任链模式最典型的代表就是Sentinel。基于SPI构建出来的典型固定流程的设计模式。其本质类似于链表的数据结构。


三、可视化

当然对于这种模式,最好是有一个界面能够进行维护,这样方便可视化。可视化界面减少运维成本。同时能够带上开关,避免因为流程带来的问题。


四、总结

三种方案,各有各的好,但是相对成本而已,方案二的成本要比方案一的成本要低一些 同时方便维护。但是如果是同一级多分支的情况下,使用专业的工作流更为合理。如果当前的审批比较固定,则选择方案三更为合理,成本小,易于维护。

目录
相关文章
|
测试技术 项目管理 前端开发
互联网项目管理流程(SOP)总结
无规矩不成方圆。 项目角色 产品经理(PM) 后台开发(RD) 前端开发(FE) 系统测试(QA) 项目周期 主要的环节包括 :需求评审、项目开发、提测、系统测试、发布上线等 序号 环节 主R(responsible) S(support) ...
4961 0
|
15天前
|
测试技术 持续交付
探索式测试:一种高效且灵活的软件质量保证策略
在快速迭代和持续交付的软件开发环境中,传统的测试方法往往难以应对日益增长的测试需求。探索式测试作为一种灵活而高效的测试实践,强调测试人员的个人技能和经验,鼓励在测试过程中不断探索和学习。本文将介绍探索式测试的核心概念、实施步骤以及如何将其与传统测试方法相结合,以提升软件质量和测试效率。
|
17天前
|
运维 数据可视化 持续交付
业务需求协作管理
业务需求协作管理
20 1
|
15天前
|
敏捷开发 测试技术
探索式测试:一种高效灵活的质量保证方法
在软件生命周期中,确保产品质量是至关重要的一环。传统的测试方法往往依赖于预设的测试用例,而忽视了测试过程中的灵活性和创造性。本文将介绍一种与传统测试截然不同的方法—探索式测试,它强调个人技能与经验的应用,鼓励测试人员发挥主观能动性,通过不断探索来发现更多潜在的软件缺陷。文章将详细阐述探索式测试的核心概念、实施步骤及其在现代软件开发中的实际应用案例,旨在为读者提供一种更为高效和灵活的测试策略。
|
29天前
|
设计模式 算法 运维
开发与运维开发问题之什么是模版模式,模版模式在业务接口设计中如何应用
开发与运维开发问题之什么是模版模式,模版模式在业务接口设计中如何应用
|
16天前
|
测试技术 开发工具 数据安全/隐私保护
自动化测试中的代码复用与维护策略
【8月更文挑战第4天】在软件开发周期中,自动化测试是确保产品质量和效率的关键步骤。随着项目规模的扩大和测试用例的激增,如何高效地管理和复用测试代码成为了一个挑战。本文将探讨自动化测试中代码复用的实践方法,以及如何通过合理的维护策略来保持测试套件的可扩展性和可维护性,旨在为读者提供实用的技巧和建议,以提升自动化测试的效率和质量。
|
1月前
|
安全 Java 数据安全/隐私保护
构建高效网站后台:权限管理系统设计与实现
【7月更文挑战第5天】在现代Web应用开发中,权限管理是后台系统不可或缺的一部分,它确保了系统的安全性与用户数据的隐私。良好的权限管理系统能够精细控制不同用户角色对功能模块及数据资源的访问权限,从而提升系统的灵活性和安全性。本文将深入探讨权限管理的基本概念、设计思路,并通过一个简单的代码示例展示如何在Web后台中实现基本的权限控制逻辑。
56 2
|
3月前
|
前端开发
基于jeecgboot流程管理平台的自定义业务表单集成方法
基于jeecgboot流程管理平台的自定义业务表单集成方法
102 0
|
3月前
|
数据采集 搜索推荐
标准审批灵活配置助力高效组织流程管理
Dataphin 在 V3.14 版本中对标准审批设置功能进行了全面升级,支持按照标准集粒度对不同数据标准的审批流程进行配置:上线、下线审批可独立配置,支持免审批;此外,Dataphin 支持设置不同模块的审批流程使用的审批系统(内置或第三方审批系统),从而将标准管理流程和且 OA 流程进行更好的结合,助力提升组织流程的管理效率,推动业务发展。
|
SQL 数据采集 分布式计算
Dataphin功能大图(三)研发:设计即研发,规范建模保障数据模型与代码的一致性
在《Dataphin核心功能: 规划功能》一文中, 讲到过Dataphin的OneModel方法论将数据建设分为四层, 分别为主题域模型(建模), 概念模型, 逻辑模型和分析模型。本文将继续展开逻辑模型和分析模型的讲解。
Dataphin功能大图(三)研发:设计即研发,规范建模保障数据模型与代码的一致性