golang 开发 OA 系统,工作流引擎选型

文章目录

    我想开发一套企业内部使用 OA 系统,使用 golang gin 开发,让 AI 推荐了几个流程管理的库,即工作流引擎。

    发现大部分找到的都是 Java Sprint Boot 的实现,但是我还是希望用 golang gin 去实现。毕竟 golang gin 目前用的最顺手,也积累了大量的内部功能库,而且服务器资源占用低。加上是集团内几个公司一块使用,使用现成的开源实现,也达不到要求,估计也很难改。还不如自己基于工作流引擎模块去自己实现。

    但是看了几个感觉比较复杂。理解成本有点高,例如:

    • GoFlow:Workflow 引擎, https://github.com/s8sg/goflow/tree/master 1.2K star
    • go-workflows:Workflow 引擎
    • Hatchet:Workflow 引擎
    • stateless:状态机库
    • statemachine:状态机库

    最后,我找了一个中文的库,同时包含后端和前端的实现。

    golang 工作流引擎选型

    后端库

    https://github.com/go-workflow/go-workflow

    虽然是 6 年前的项目,而且没有更新了。但是我感觉可以参考一下。使用 gin 重写一下。

    我主要是看中其中的数据结构说明,及流程说明。而且是中文的比较好理解。

    除了 README,还有一处接口说明:

    https://github.com/go-workflow/go-workflow/blob/master/EXAMPLE.md

    但是这个接口中每次需要传 userID 是不太合理,存在隐患。

    ## 前端库
    - https://github.com/go-workflow/workflow-ui
    - https://github.com/go-workflow/go-workflow-UI

    看起来是基于 vue2 的前端组件。

    为何选择这个库

    • 使用 json 数组替代 BPMN 来生成流程定义,简化流程定义的生成。但是,BPMN 还是得了解一下。
    • 将所有的无关流程的数据,包括用户、用户组等信息从服务中解耦出去,go-workflow 只纪录流程的流转

    缺点

    目前唯一的担心是,如果没有采用 BPMN,以后会不会遇到发现没有兼容的场景。

    关于作者 🌱

    我是来自山东烟台的一名开发者,有感兴趣的话题,或者软件开发需求,欢迎加微信 zhongwei 聊聊,或者关注我的个人公众号“大象工具”, 查看更多联系方式