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