一个Spring Boot开发者决定向Camunda宣战。他的武器不是更好的BPMN工具,而是一套零依赖的原生JavaScript代码——整个前端打包后不到200KB。
这就是Camino Flow Editor的诞生背景。作者构建它是为了解决一个被忽视的矛盾:轻量级工作流引擎需要配套的重型前端工具,这本身就是悖论。
从XML暴政到JSON自由
传统BPMN工具的问题,用过的人都知道。Camunda、Flowable这些方案强迫你维护庞大的XML文件,学习曲线陡峭到能划伤膝盖,数据库表膨胀得像过年后的体重秤。
Camino引擎选择用JSON结构替代XML,用MVEL表达式(一种Java表达式语言)替代图形化脚本。Spring Boot开发者可以直接把服务层方法映射到流程节点,不需要在业务代码和流程定义之间来回横跳。
但JSON也有JSON的麻烦。当业务逻辑扩展到20个节点以上,手写嵌套数组、维护id和nextId的对应关系,出错概率呈指数级上升。作者的原话是:「你失去了传统BPMN工具那种"视觉地图"的直觉优势。」
所以需要可视化编辑器。但作者做了一个反直觉的决定:不用React,不用Vue,不用任何NPM包。
零依赖架构的代价与收益
「保持轻量」不是口号,是贯穿始终的设计约束。Camino引擎本身追求零外部依赖,前端编辑器如果拖进来一个React生态,相当于素食餐厅的后厨藏着整只烤乳猪。
技术选型因此变得极端:HTML5 Canvas负责渲染,原生JavaScript处理状态管理,CSS变量实现主题切换。没有虚拟DOM的 diff 算法,就自己实现一套轻量级的节点位置缓存;没有React DnD,就用Pointer Events API手写拖拽逻辑。
作者提到的一个细节很有意思:节点之间的连线采用贝塞尔曲线,但为了避免计算开销,只在用户拖拽时实时渲染,静止状态下缓存为SVG路径。这种「懒优化」思路贯穿整个项目。
认知负荷的减法设计
可视化编辑器有个通病:信息过载。当每个节点都展开显示全部配置属性,十个步骤的流程能铺满三块显示器。
Camino Flow Editor的解决方案是分层信息架构。画布上只显示节点类型和名称,双击进入编辑模式才暴露MVEL表达式、条件分支等细节。这种「渐进披露」策略降低了初学者的认知门槛,也让复杂流程的鸟瞰图保持可读。
另一个关键设计是自动ID映射。用户在UI上拖拽连线时,编辑器后台自动处理sourceId到targetId的关联,导出时生成符合Camino引擎规范的JSON。这意味着业务分析师可以参与流程设计,不需要理解UUID的生成规则。
灵活性的边界在哪里
Camino引擎对ID格式极度宽容。长UUID可以,"fetch_user"这样的语义化字符串也可以,"step_1"这种简单编号照样工作。只要nextId能正确指向目标节点的id,引擎不关心你用什么命名约定。
这种设计哲学延伸到编辑器:不强制预设模板,不限制节点数量上限,甚至不校验MVEL表达式的语法——运行时出错是Java层的责任,编辑器只管生成合法的JSON结构。
作者坦承这是有意为之。「工具应该保持愚蠢,」他在代码注释里写,「聪明的业务逻辑属于引擎,不属于画布。」
目前Camino Flow Editor的GitHub仓库尚未公开完整源码,但核心架构已经通过技术博客披露。作者计划下一步支持流程版本的diff可视化,以及基于WebSocket的多人协作编辑——当然,仍然坚持零依赖路线。
一个值得玩味的对比:Camunda的Modeler安装包超过300MB,而Camino Flow Editor的单HTML文件可以在任何现代浏览器直接打开。这种体积差距背后,是两种截然不同的产品假设——前者假设用户需要企业级功能的完备性,后者假设开发者更在意启动速度和定制自由。
你会为了砍掉依赖链,愿意手写多少原本由框架代劳的代码?
热门跟贴