Activiti的对比

流程定义工作流引擎的灵魂,一个合理的流程定义规范,既要考虑使用的便利性,又要考虑功能特性的可扩展性

Activiti无疑是Java语言领域工作流引擎的标杆,依据BPMN2.0规范采用XML格式来定义工作流

1. JAVA + BPMN + XML

BPMN + XML的优点是标准统一,与JAVA语言的开发调性相匹配。当然,缺点是繁琐,如果脱离了图形化编辑工具,采用手写XML定义,非常不便利

2. JS + 类BPMN + JSON

CabloyJS经过反复的评估与权衡,决定仍然参考BPMN规范的特性集,但是采用JSON格式进行定义。虽然属于自定义格式,但符合JS语言的调性,优点是简约、易写、易读,同样具备优秀的可迁移性

流程定义

CabloyJS通过原子的概念对所有业务数据进行抽象,并提供了丰富的特性和管理页面。因此,流程定义也是一个原子类型。我们可以像一般的原子数据一样,对流程定义进行管理

对于原子数据而言,既可以通过管理页面动态创建流程定义,也可以通过静态原子的方式创建流程定义。在系统启动时,会自动读取静态原子,并写入数据库

流程部署

当创建流程定义并入库后,系统会自动对流程定义进行部署

启用/禁用

可以通过管理界面API两种方式启用/禁用流程定义

副产品:版本控制

当启动一个流程实例,还未结束时,流程定义可以再次编辑。那么,运行中的流程实例仍然引用启动时的版本,从而保持流程的一致性

这是采用原子概念的副产品,因为原子本身就具备草稿->正式->历史生命周期管理,采用atomStaticKey + atomRevision的组合可以唯一引用一个历史版本的原子数据

副产品:流程定义的审批工作流

由于可以给原子数据附加审批工作流,而流程定义本身也是原子,因此,我们也可以给流程定义附加审批工作流,让流程定义的管理也更加可控、可追溯。因此,这个特性也是采用原子概念的副产品

更多副产品

采用原子的概念来管理流程定义带来的副产品还有很多,比如我们可以对流程定义进行分类管理。这一切都源于原子特性的丰富和功能的强大,请参见:原子基本概念