对比工作流引擎和状态机

Posted by Vincent on Thursday, October 19, 2023

前言

互联网研发大量转型B端,我接触了大量的ToB业务系统,各行业的信息化转型第一步多会考虑将业务流程进行电子化,因此业务流程的线上处理是各个业务系统的基础功能,也是业务部门使用最多的功能模块。其余的几大模块则是自定义表单、数据集成以及可视化大屏。后续都进行一下研究,希望设计一组通用性较强的组件,可以快速部署到各类业务系统,以应付各类定制开发业务。该文原始内容来自 https://workflowengine.io/blog/workflow-engine-vs-state-machine/

当企业决定实现一个系统来帮助他们管理他们的业务工作流,他们会有两个选择,选择使用工作流(Workflow)还是状态机(State Machine),尽管这两个系统看起来很相似,但他们都有许多与彼此不相同的特点,因此我们有必要分析他们的优缺点,来决定哪个实现可以更好的满足企业的需求。

总的来说,他们最主要的区别是在工作流引擎中,当一个节点的工作完成后会进入到下一个节点。而状态机需要一个事件来导致分支转换到下一个节点。也就是状态机是事件驱动的,而工作流不是。

主要特征

我们从5个方面分析这两个系统的差异

灵活性

当任务一个接一个地执行时,工作流引擎支持顺序模式。 工作流程中的下一步只有在前一步完成后才会开始。 例如,只有律师签字后,老板才会在文件上签字。 结果,工作流引擎本质上似乎是僵化的和确定性的。 相反,状态机异步工作。 由于机器中的步骤是由某些事件/操作触发的,因此不一定要按严格的顺序执行。 从这个角度来看,状态机更加灵活。

然而,一旦您的公司有了新的业务需求,情况就会发生变化。 想象一个状态机,它具有以下三种状态:提交申请、接受申请和拒绝申请。 目前,我们可以看到三个独立的状态以及向它们的清晰过渡。 后来您决定添加一些新状态,例如更改应用程序并寻求反馈。 在这种情况下,状态的数量以及它们之间的转换会大大增加。 此外,在添加新状态时,您应该明白,您无法在不破坏其余状态的情况下更改其中一个状态。 因此,您发现自己不是简单地添加新功能,而是从头开始构建新系统。 因此,当您了解您的业务规则可能会随着时间的推移而变化(这实际上是不可避免的过程)时,工作流引擎是一个更好的选择。

易于理解

状态机乍一看似乎很容易使用。 开发人员只需要检查公司的流程并绘制一个图表,在该图表上他应该描述特定数量的状态和事件,这些状态和事件将触发向它们的转换。 然而,状态机的主要问题是在实践中它只适合具有一维问题的业务。 它适用于具有多个不同状态的项目,但在存在更复杂的系统时会失败。 构建为一系列状态的典型 CRM 系统可能会导致许多问题。 您必须考虑多种状态转换,例如新潜在客户的注册、项目的启动或取消。 此外,这些状态中的每一个也可以分为单独的状态。 例如,您可能想要定义取消原因或通过哪个渠道找到新的潜在客户(电子邮件活动、推销电话等)。 当试图描述每一种状态时,系统很快就会变得难以管理。

工作流引擎一开始似乎相当复杂,因为应该部署额外的元素。 然而,对于较大的系统,这是最合适的解决方案。 如果实施得当,好处会超过表面上的复杂性。 工作流引擎似乎是业务流程管理的更好模型。 它通常用于任务管理系统,能够快速地将任务分配给各个执行者。 此外,工作流引擎通常有可靠的文档。 新开发人员将能够理解它,而无需花费大量时间分析无休止的代码行。

可读性

公司内部和外部人员之间的有效协作是业务发展的必要条件。 因此,公司使用的通用平台应该对所有员工都清楚。 管理者应该能够在任何给定时间快速识别特定操作处于哪种状态。

状态机在可读性方面较差。 它一次只能执行一个状态,因为不可能并行运行两个状态。 因此,当您尝试引入在某些条件下可能发生的事件时,状态数量会增加一倍。 当状态数量变得太多时,状态机的可读性趋于零。

可预测性

与状态机相比,工作流引擎本质上是可预测的。 他们使用总是在一开始就预先定义的条件。 假设您需要直接经理和总经理的文件批准。 该文件可以按任何顺序签署。 如果您选择工作流引擎,则该流程将被预定义。 例如,首先由直属经理签署文件,然后由总经理签署。 因此,只有直属经理签字后,总经理才会收到该文件。 此过程无法更改。

在状态机模式中,由用户决定是直接还是总经理应该首先签署文件。 在这种情况下,决定是由人们做出的。 由于状态机是由外部因素控制的,因此可能有许多事件会导致流程完成。 从这个角度来看,工作流引擎更有利,因为它可以指导您完成整个流程。

结论

如果您的系统不是很复杂,状态机是一个很好的解决方案。 如果您能够绘制所有可能的状态以及将导致向它们过渡的事件,您就可以实现它。 一般来说,状态机适用于网络协议或某些嵌入式系统。

工作流引擎的实现是管理业务流程的好方法。 它是任务分配、CRM 和其他复杂系统的正确解决方案。 总而言之,其最终目标是改善业务流程和公司效率。 这就是为什么它非常适合业务流程自动化。

「真诚赞赏,手留余香」

我的乐与怒

真诚赞赏,手留余香

使用微信扫描二维码完成支付