使用工作流引擎、状态机引擎还是滚动我自己的引擎?

2022-09-03 05:59:34

我很困惑。我正在为我的公司开发一个基于圣杯的内部工具。此工具中的一个组件是简单的问题跟踪器(帮助台功能)。我有域对象,如问题,问题和NewFeature。其中每个域类都有不同的工作流。

我最初的想法是在域对象中滚动我自己的状态机功能。然后,我在谷歌上搜索了状态机引擎和工作流引擎。现在我迷路了。

我想评论一下其他开发人员如何解决这个问题。你使用Drools,Jbpm,Activiti吗?还是一些更简单的状态机引擎?

我一直在阅读一些关于Drools的文档,Jbpm。他们看起来非常好。但似乎我只需要这些库提供的一小部分功能。

我正在使用Grails,但它当然也很容易使用Java库。


答案 1

工作流引擎的主要价值在于,它可以通过某些工作流定义 DSL 自定义流。如果您不需要允许用户定义自己的任意工作流,那么您最好只构建自己的工作流。

此外,工作流引擎通常使您能够定义运行时间很长的业务事务和规则。例如,您可以有一个用于授权采购订单的工作流程,其中第一步是输入有关需要购买的内容的一些信息,然后如果购买的价格低于$ 100,则可以立即使用它,如果它介于$ 100和$ 2000之间,直线经理可以接受,如果它更多,则将其发送给其他人进行审批...等。这些类型的业务规则往往会随着金额的增加或公司的业务策略的变化而变化。因此,在这些情况下使用工作流引擎是有意义的。可以从工作流引擎中受益的复杂业务交易的其他好例子是提出保险索赔,授权贷款或抵押贷款,评估客户的信贷申请......等。这些业务交易往往经过几个人/部门,需要几个小时到几天或几周才能完成。

规则引擎适用于从应用程序中提取复杂但不断变化的规则。假设您是一家在线零售商,可以向美国,加拿大,英国,德国和法国的客户发货。您需要对在在线商店中销售的产品收取税费,但计算税费的规则因国家/地区而异,并且因国家/地区内的不同省而异。此外,有些东西在一个省免税,但在其他省则不然。规则引擎非常适合这些类型的复杂业务规则,只要政府更改其税收政策,这些规则就会发生变化。规则引擎可以给你一个正确的答案,你只需要去规则引擎说我想运行规则#10,这里是规则#10 x,y,z的输入,你会得到一个答案。

规则引擎和工作流引擎之间的主要区别在于,规则引擎不跟踪事务的状态,它应该是无状态的,仅处理您提供的输入。工作流引擎是有状态的,它必须知道工作流处于什么当前状态,并且必须将该状态保存到数据库中。工作流引擎还会等待来自外部源(如人员或系统)的输入。

根据你对应用程序的描述,我只会编写一些时髦的类来计算票证的下一个状态,并确保该类有很好的文档记录,并且很容易在几年内更新。我认为规则引擎和工作流引擎对于您的情况来说有些过分,您设置和使用它们所需的时间要比您用时髦的方式编写代码所需的时间要大得多。如果随着时间的推移,你发现你需要规则引擎和工作流引擎的复杂性,我会付出代价,而不是现在,保持简单始终是最好的选择。


答案 2

我不能更同意AMS上面的答案,我想补充的另一件事是,在大多数情况下,使用工作流/规则引擎是过度和不必要的。KISS(保持简单和愚蠢)始终是最佳选择奥卡姆剃刀也说“实体不应该被不必要地乘以”

根据我自己在阿里巴巴的工作经验,大多数配备工作流/规则引擎的应用程序都将维护工作置于噩梦中,如果您使用简化的impl而不是盲目选择工作流/规则引擎,那么后来来参加项目的人会欣赏您。

那么,是否有指南告诉何时使用工作流?坦率地说,我不知道,但我所知道的是,每当业务逻辑在流程中时,我们绝对不应该使用工作流。因为如果你愿意,每个业务逻辑都可以在流程图中呈现。

最后,我去年做的最正确的事情之一就是重新设计一个应用程序,用时髦的脚本取代Drools,这使得整个系统更加简单,简单和快速。


推荐