使用工作流引擎,状态机引擎还是自己动手?


狗头军师
2025-03-31 11:55:08 (1小时前)

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

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

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

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

我为此使用Grails,但是当然也很容易使用Java库。

2 条回复
  1. 1# v-star*위위 | 2020-08-23 14-42

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

    此外,工作流引擎通常还使您能够定义长期运行的业务交易和规则。例如,您可以拥有一个用于授权采购订单的工作流程,第一步是输入一些有关需要购买的商品的信息,然后如果您购买的商品价格低于100美元,就可以遵循规则,马上购买,如果在$ 100和$ 2000之间的直属经理可以,如果更多,则将其发送给其他人以供批准…等等。随着时间的推移,随着金额的增加或公司的业务政策,这些类型的业务规则趋于变化更改。因此,在这些情况下使用工作流引擎是有意义的。可以从工作流引擎中受益的复杂业务交易的其他很好的例子是提出保险索赔,授权贷款或抵押,

    规则引擎非常适合从应用程序中提取复杂但不断变化的规则。假设您是一家在线零售商,向美国,加拿大,英国,德国和法国的客户发货。您需要对您在网上商店出售的产品收取税款,但计算税款的规则因国家/地区而异,而且在一个国家/地区中各省之间也有所不同。同样,有些事情在一个省份免税,但在其他省份则不。规则引擎非常适合这些类型的复杂业务规则,只要政府更改其税收政策,这些规则就可以更改。规则引擎可以为您提供正确的答案,您只需要去说规则引擎,说我想运行规则#10,这就是规则#10 x,y,z的输入,您就会得到答案。

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

    根据您对应用程序的描述,我将只编写一些常规类来计算票证的下一个状态,并确保该类记录完整并易于在几年内进行更新。我认为规则引擎和工作流引擎对于您的情况而言过于矫kill过正,设置和使用它们所花费的时间要比使用groovy编写代码要长得多。如果随着时间的流逝您发现您需要规则引擎和工作流引擎的复杂性,那么我会为此付出代价,而不是现在,让它保持简单永远是最佳选择。

登录 后才能参与评论