规则引擎开发经验分享 - reddit


背景。我在一个团队中工作,负责管理一堆不同的规则引擎。其中一个是纯粹的Java面条,只有开发它的人明白,另一个是在一个专有的BRMS系统上运行,有数万条规则,还有一个是我开发的,是一个决策表系统。

在建立一个规则引擎时,你能做的最重要的事情就是限制它的功能。在你的例子中,你应该至少有三个独立的规则引擎:一个做账户逻辑,一个检查产品可用性,另一个寻找客户账户问题。这将有助于限制可能出现的意大利面条。

你能做的第二件最重要的事是确保每条规则都能被测试、重构,并且你能为这套规则提供保证。为此,我建议避免使用执行规则的单独语言。它可能很强大,但它们可能是测试的噩梦,而且专门的规则语言通常没有主流语言那么好的工具。如果你使用像决策表这样的东西,那么验证输入和正确地将其转化为你自己代码中的类就容易多了。

最后,我建议在你的规则中防止任何形式的状态或排序。如果你需要在各轮执行之间保持状态,你很可能实际上是在谈论不同类型的规则,例如,建立不同的规则集来确定客户是否可以下订单(布尔输出),以及另一个规则集来确定他们得到的信贷金额(小数输出),而不是把它们放在一起,用0来表示客户不能下订单。