问题: 我正在寻找第一手经验。
我查看过一些资源:
我有偏见,因为我是StonePath的主要作者。
我曾为美国国务院、日内瓦人道主义除雷中心、数家财富500强企业以及最近的华盛顿特区公立学校系统开发工作流应用程序。每次我看到一款试图成为业务流程的主要参考工具的“工作流引擎”,我都会看到组织机构在与工具周旋的情况。这可能是因为这些解决方案一直是由供应商或产品驱动的,然后最终出现了一个战术性团队的“顾问”,不断地向应用程序提供反馈…但正因为如此,当我听到基于流程的工具承诺“将工作流定义集中在一个地方并使其可重复”时,我倾向于产生消极反应。
我非常喜欢Ruote
- 我已经关注该项目有一段时间了,如果我需要那种解决方案,它将是我愿意尝试的下一个工具。StonePath的目的与Ruote完全不同。
Ruote对Ruby普遍有用,
StonePath针对的是Ruby编写的Web框架Rails。
Ruote是关于长期经营的业务流程及其相关定义(备注-ruote
的活跃开发已停止)。
StonePath是关于管理基于状态的工作流和任务的。
坦白地说,我认为从外部看这种区别可能微妙 - 许多时候相同类型的业务流程可以以任一方式表示 - 基于状态和任务的模型往往映射到我的思维模型。
让我描述一下基于状态的工作流的亮点。
想象一个围绕类似抵押贷款或护照续期处理的工作流。随着文件在“办公室”中移动,它会从一个状态转移到另一个状态。
如果您负责此文档,您的老板要求您提供状态更新,您会说像这样的话:
这些是基于状态的工作流中的状态。我们通过转换从状态到状态移动,例如“批准”、“应用”、“退回”、“拒绝”等等。这些通常是动作动词。像这样的事情一直被建模为状态机软件。
状态/任务型工作流的下一部分是任务的创建。
任务是一项工作单元,通常具有截止日期和处理说明,将工作项(例如贷款申请或护照续期)与用户的收件箱连接起来。
此类行为是可选的,并且是工作流程定义的一部分。
这种行为可以比此更深入,我在《实用程序员杂志》第4期中写了一篇文章。请查看上面提供的存储库链接以获取更新后的PDF版本。
在过去几个月与StonePath合作中,我发现基于状态的模型非常适合RESTful Web架构 - 特别是任务和状态转换在嵌套资源上很好地映射。请期待我在这个主题上发布更多文章。
我很偏袒,我是ruote的作者之一。
变体1)状态机附加到一个资源(文档、订单、发票、书籍、家具等)。
变体2)状态机附加到名为任务的虚拟资源上。
变体3)解释工作流程定义的工作流引擎。
现在您的问题标记为“BPM”,我们可以扩展为“业务流程管理”。每个变体中的管理是如何发生的?
在变体1中,业务流程(或工作流程)分散在应用程序中。附加到资源的状态机强制执行与资源相关的工作流程的某些方面。可能会有其他资源具有自己的状态机,遵循相同的业务流程。
在变体2中,工作流可以围绕任务资源集中,并由该资源周围的状态机表示。
在变体3中,通过解释称为工作流定义(或业务流程定义)的资源来实施工作流。
业务流程更改时会发生什么?是否值得使用工作流引擎来管理业务流程?
大多数状态机库都具有1组状态+转换。大多数工作流引擎都是工作流程定义解释器,并允许多个不同的工作流同时运行。
更改工作流程的成本是多少?
这些变体不是相互排斥的。我看过许多例子,其中工作流引擎改变了多个资源的状态,其中一些受到状态机保护。
我也经常使用变体3 + 2,用于人类任务:在运行进程实例的某些点上,工作流引擎将任务(工作项)交给人员参与者(资源任务被创建并放置在“就绪”状态)。
您可以通过仅使用变体2(任务管理器变体)来完成很长一段路程。
我们还可以提到变体0),其中没有状态机、工作流引擎,业务流程分散或硬编码在应用程序中。
你可以问很多问题,但如果你不花时间阅读答案并不费力去尝试和实验,就不会走得太远,也永远无法获得何时使用这个或那个工具的技巧。
和其他许多任务
另一组用例是基于将现有的工作流引擎移植到Temporal上运行。实际上,几乎任何现有的引擎工作流规范语言都可以移植到Temporal上运行。这样,一个后端服务就可以支持多个特定领域的工作流系统。>您使用工作流引擎解决了哪些问题?
我开始考虑工作流引擎的个人目标是避免在应用程序中硬编码业务逻辑。企业应用程序中的许多东西都可以重复使用,因此保持可配置是有意义的。例如:
从这个功能列表可以看出,我谈论的是人类中心的工作流。简而言之:人类中心的工作流引擎回答以下问题:谁负责任务,下一个需要被通知的人是谁?这些是业务需求中的典型问题。
>您使用了哪些库/框架?
5年前,我们开始重新实现Imixs-Workflow引擎,重点关注BPMN 2.0。BPMN是流程建模的通用标准。让我惊讶的是,我们突然能够描述甚至高度复杂的业务流程,这些流程可以被可视化和执行。我建议每个人都使用BPMN来建模业务流程。
>在什么情况下,一个简单的状态机/任务管理系统就足够了?
如果您只想跟踪业务对象的状态,则简单的状态机就足够了。这种情况发生在您开始将“状态”属性引入您的对象模型时。但是,如果您需要具有责任、日志记录和流程控制的业务流程,则状态机不再足够。
>额外问题:您如何区分任务管理和工作流引擎?
这正是许多提到的工作流引擎之间的差异所在。对于人类中心的工作流,您通常需要任务管理来在人类参与者之间分配任务。对于流程自动化,这一点并不重要。引擎执行某些任务即可。无法比较任务管理和工作流引擎,因为任务管理始终是工作流引擎的功能之一。
我不知道其他BPMN引擎是否更适合这种场景,因为BPMN主要用于涉及用户交互的长时间运行的业务任务,性能可能不是我们案例中的主要问题。