工作流引擎的主要价值在于它可以通过一些工作流定义 DSL 来定制流。如果您不需要允许用户定义他们自己的任意工作流程,那么您最好只构建自己的工作流程。
此外,工作流引擎通常使您能够定义运行时间很长的业务事务和规则。例如,您可以有一个授权采购订单的工作流程,其中第一步是输入一些关于需要购买什么的信息,然后如果购买价格低于 100 美元,那么您就有相应的规则了,如果是100 美元到 2000 美元之间的直线经理可以,如果更多,则将其发送给其他人以供批准……等等。随着金额的增加或公司的业务政策,这些类型的业务规则多年来往往会发生变化改变。因此,在这些场景中使用工作流引擎是有意义的。可以从工作流引擎中受益的复杂业务交易的其他很好的例子是提出保险索赔,授权贷款或抵押,
规则引擎非常适合从应用程序中提取复杂但不断变化的规则。假设您是一家在线零售商,向美国、加拿大、英国、德国和法国的客户发货。您需要对您在网上商店销售的产品征税,但计算税费的规则因国家/地区和国家/地区的省而异。还有一些东西在一个省免税,在其他省不免税。规则引擎非常适合这些类型的复杂业务规则,只要政府改变其税收政策,这些规则就会发生变化。规则引擎可以给你一个正确的答案,你只需要去规则引擎说我想运行规则#10,这里是规则#10 x,y,z 的输入,你会得到一个答案。
规则引擎和工作流引擎之间的主要区别在于,规则引擎不跟踪事务的状态,它应该是无状态的,只处理您提供的输入。工作流引擎是有状态的,它必须知道工作流的当前状态,并且必须将该状态保存到数据库中。工作流引擎还等待来自外部资源(例如人员或系统)的输入。
根据您对应用程序的描述,我只想编写一些常规类来计算工单的下一个状态,并确保该类有据可查并且易于在几年内更新。我认为规则引擎和工作流引擎对于您的情况来说太过分了,您设置和使用它们所花费的时间比您在 groovy 中编写代码所花费的时间要长得多。如果随着时间的推移你发现你需要规则引擎和工作流引擎的复杂性,我会付出当时而不是现在的代价,保持简单永远是最好的选择。