为解耦而生的插件

团队做了很多年的开发平台,遇到过各色的客户需求,他们让我们学到没有系统功能可以完全胜任任何业务,如果有他一定是一坨很难用的东西。既然无法满足所有人,那我们只有设计自己认为最合理的功能,并保留可扩展的能力

比如 AgileBPM 的所有模块,都会设计API模块,并对外提供适配层
消息发送功能 可以自由新增新的消息实现类型,附件上传可以切换或者添加新的 附件持久化实现,不同类型表单的生成,不同形式的鉴权等等

行业经验赋予了 AgileBPM 更高阶的业务抽象能力,实际编码中,我们在开放封闭原则方面做出了很大的努力,利用策略模式、模板模式、适配器等预留可扩展点,力求让有扩展需求的功能都实现可插拔让系统灵活度达到极致

除了解耦运用常见设计模式外,AgileBPM 还会有其他解耦方式,比如流程所有功能皆插件,可插拔,表单的控件组件,业务对象的持久化链、格式化链 等

流程插件

AgileBPM 在 Activiti 事件基础上拓展了一套插件体系
会在以下时机执行

  • 任务创建
  • 任务完成
  • 流程启动
  • 流程结束

在插件中可以使用流程生命周期中的环境变量、如

  • 表单业务数据
  • 流程变量
  • 流程实例
  • 任务信息

流程插件会订阅事件,比如消息插件订阅了所有事件,即消息插件会在任务创建、任务结束、流程启动、流程结束均会执行(如果流程没有配置则不会执行)

表单插件

自定义表单封装了很多组件比如:

  • 自定义对话框组件
  • 表单函数计算指令
  • 数据字典组件
  • 日期计算组件
  • 日期校验比较组件
  • 表单校验指令
  • 权限指令
  • 动态权限配置组件
  • 动态联动下拉框组件
  • 各种表单控件等

表单控件、组件在表单设计阶段,可以直接可视化配置,当然如果了解组件的实现和配置内容,也可以直接编辑源码的形式去配置组件

业务对象插件

业务对象在数据持久化和数据读取过程中定义了一个执行器链

保存过程中的执行器链

  • 数据格式化处理,(前端是JSON形式格式化成 真正的数据格式)
  • 业务数据权限处理 (只保存有编辑权限的字段并且后端校验必填字段)
  • 乐观锁
  • 逻辑删除
  • 默认数据赋值插件

获取数据的执行器链

  • 数据格式化
  • 数据权限处理(只获取有只读以上的数据)
  • 默认值赋值

业务对象的插件主要是在持久化和获取数据过程中处理加工业务数据