规则引擎 – 规则引擎 – 利弊

我正在审计一个使用所谓的Rules Engine项目。简而言之,它是一种从应用程序代码外部化业务逻辑的方法。

这个概念对我来说是全新的,我对此非常怀疑。在过去几年听说人们谈论Anemic Domain Models之后,我质疑规则引擎方法。对我来说,他们似乎是一个伟大的方式WEAKEN领域模型。例如,我做一个java webapp与规则引擎交互。然后我决定我想要一个基于同一个域的Android应用程序。除非我想让Android应用程序与规则引擎进行交互,否则我将不得不错过任何已经编写的业务逻辑。

因为我没有任何经验,只是好奇心,我有兴趣听说到利弊使用规则引擎?我可以想到的唯一的pro,你不需要重建整个应用程序只是为了改变一些业务规则(但真的,有多少应用程序真的有这么多的改变?但是使用规则引擎来解决这个问题对我来说像是在一个散弹枪伤口上放置一个助听器。

更新 – 自写作以来,神自己,马丁福勒,有blogged about using a Rules engine

我看到的大多数规则引擎被系统代码视为一个黑盒子。如果我要构建一个领域模型,我可能想要某些业务规则是领域模型的固有的。告诉我对象有无效值的业务规则。这允许多个系统共享域模型,而不重复业务逻辑。我可以让每个系统使用相同的规则服务来验证我的域模型,但这似乎削弱了我的领域模型(如问题中所指出的)。为什么?因为不是始终在所有系统上始终执行我的业务规则,而是依靠系统程序员来确定何时应该强制执行业务规则(通过调用规则服务)。如果域模型完全填充,这可能不是一个问题,但如果您处理的用户界面或系统在其整个生命周期中更改域模型中的值,则可能会出现问题。

还有另一类业务规则:决策。例如,保险公司可能需要对申请人承保的风险进行分类,并获得溢价。您可以将这些类型的业务规则放在您的域模型中,但是对于这种情况的集中式决策通常是可取的,实际上非常适合面向服务的架构。这提出了为什么一个规则引擎而不是系统代码的问题。规则引擎可能是更好的选择的地方是负责决策的业务规则随时间变化(正如一些其他答案已经指出的)。

规则引擎通常允许您在不重新启动系统或部署新的可执行代码的情况下更改规则(不管您从供应商收到什么承诺,请确保在非生产环境中测试您的更改,因为即使规则引擎无瑕疵,人类仍在改变规则)。如果你在想,“我可以通过使用数据库来存储改变的值”,你是对的。规则引擎不是一个新的东西的魔法盒。它旨在成为一个提供更高级别抽象的工具,以便您可以更少地关注重新发明轮子。许多供应商通过让您创建模板,使业务用户可以填充空白,而不是学习规则语言,进一步。

关于模板的一个分割警告:模板永远不会比编写没有模板的规则花费更少的时间,因为模板必须至少描述规则。计划更高的初始成本(就像建立一个使用数据库存储值的系统,而不是直接在系统代码中编写规则) – 投资回报率是因为你节省了未来的系统代码维护。

http://stackoverflow.com/questions/250403/rules-engine-pros-and-cons

本站文章除注明转载外,均为本站原创或编译
转载请明显位置注明出处:规则引擎 – 规则引擎 – 利弊