我有一个相当不错的使用规则引擎的优点列表,以及使用它们的一些原因,我需要的是你不应该使用规则引擎的原因列表
到目前为止,我所做的最好的是:
规则引擎并非真正用于处理工作流程或流程 执行也不是工作流引擎或流程管理工具 旨在制定规则。
你不应该使用它们的任何其他重要原因?
答案 0 :(得分:141)
我将从个人经验中给出2个例子,其中使用规则引擎是一个坏主意,也许这会有所帮助: -
课程:出于某种原因,它们被称为“业务规则”,当您无法设计易于业务用户维护/理解的系统时,请不要使用规则。
课程:在初始版本更改期间,需求往往会发生很大变化,并且不保证使用规则。当您的业务经常更改时(而不是要求),请使用规则。例如: - 随着税法的变化,您的税收将逐年变化,并且规则的使用是一个很好的主意。随着用户确定新要求,Web应用程序1.0版将经常更改,但随着时间的推移会稳定下来。不要使用规则作为代码部署的替代方法。
答案 1 :(得分:31)
当我看到人们使用非常大的规则集时(例如,在单个规则集中的数千个规则的顺序),我感到非常紧张。当规则引擎是位于企业中心的单身人员时,通常会发生这种情况,希望保留规则DRY可以让许多需要它们的应用程序访问它们。我无视任何人告诉我,Rete规则引擎有很多规则是很容易理解的。我不知道有任何工具可以检查以确保不存在冲突。
我认为分区规则设置为保持较小是更好的选择。方面可以是在许多对象之间共享公共规则集的方法。
我更倾向于使用更简单,更加数据驱动的方法。
答案 2 :(得分:18)
我是Business Rules Engines的忠实粉丝,因为它可以帮助您作为程序员让您的生活更轻松。我在处理数据仓库项目时遇到的第一个经验之一就是找到包含复杂CASE结构的存储过程,这些结构遍及整个页面。这是调试的噩梦,因为很难理解在这种长CASE结构中应用的逻辑,并确定代码的第1页和第5页的另一条规则之间是否存在重叠。总的来说,我们有代码中嵌入了300多条此类规则。
当我们收到一个新的开发要求时,对于一个名为Accounting Destination的东西,涉及处理超过3000条规则,我知道必须改变一些东西。那时候我一直在研究一个原型,后来成为现在是自定义业务规则引擎的父级,能够处理所有SQL标准运算符。最初我们一直使用Excel作为创作工具,稍后我们创建了一个ASP.net应用程序,它允许业务用户定义自己的业务规则,而无需编写代码。现在系统工作正常,错误很少,并且包含超过7000条规则来计算此会计目的地。我不认为这种情况只能通过硬编码实现。用户非常高兴他们可以定义自己的规则而不会成为他们的瓶颈。
但是,这种方法还是有限的:
有关此主题的更多详细信息,请参阅我撰写的帖子:http://dwhbp.com/post/2011/10/30/Implementing-a-Business-Rule-Engine.aspx
总体而言,使用业务规则引擎的最大优势在于,它允许用户收回对业务规则定义和创作的控制权,而无需在每次需要修改某些内容时都去IT部门。它还减少了IT开发团队的工作量,现在可以专注于构建具有更多附加值的东西。
干杯,
尼古拉
答案 3 :(得分:17)
我注意到的一把“双刃剑”是:
将逻辑放在非技术人员手中
我看到这项工作很棒,当你在非技术方面有一两个多学科天才,但我也看到缺乏技术导致膨胀,更多的错误,一般4倍的开发/维护成本。
因此,您需要认真考虑您的用户群。
答案 4 :(得分:11)
我认为Alex Papadimoulis的文章非常有见地:http://thedailywtf.com/articles/soft_coding.aspx
这并不全面,但他有一些好处。
答案 5 :(得分:10)
关于何时不使用规则引擎的伟大文章...(以及何时使用规则)....
http://www.jessrules.com/guidelines.shtml
另一个选择是,如果你有一套线性的规则,只能以任何顺序应用一次以获得结果,就是创建一个groovy接口并让开发人员编写和部署这些新规则。它的优点是速度快,因为通常你会通过hibernate会话或jdbc会话以及任何参数,这样你就可以以有效的方式访问所有的应用数据。使用事实列表,可能会有很多循环/匹配真的会降低系统速度.....这是避免规则引擎并能够动态部署的另一种方法(是的,我们的groovy规则部署在一个数据库,我们没有递归......它要么符合规则,要么没有。)这只是另一种选择.....哦,另外一个好处是没有为传入的开发人员学习规则语法。他们必须学习一些groovy,但这非常接近java,因此学习曲线要好得多。
这实际上取决于你的背景。规则引擎有它们的位置,如果你有一个项目规则,你可能想要为非常简化的情况(不需要规则引擎)动态部署,上面只是另一种选择。
基本上不要使用规则引擎,如果你有一个简单的规则集,而且可以有一个groovy接口......就像动态可部署一样,加入你团队的新开发人员可以比drools语言更快地学习它。(但那是我的意见)
答案 6 :(得分:7)
根据我的经验,当以下情况属实时,规则引擎效果最佳:
如果缺少这四个特征中的任何一个,你仍然可能会发现一个规则引擎适合你,但每次我尝试过甚至一个缺失时,我都遇到了麻烦。
答案 7 :(得分:1)
这肯定是一个好的开始。规则引擎的另一个原因是有些事情是很容易理解的,确定性的和直截了当的。工资单扣缴是(或曾经是)这样的。您可以将其表达为可由规则引擎解析的规则,但您可以表达与相当简单的值表相同的规则。
因此,当您表达具有持久数据的长期流程时,工作流引擎是很好的。规则引擎可以做类似的事情,但你必须做很多额外的复杂性。
当您拥有复杂的知识库并需要搜索时,规则引擎就很好。规则引擎可以解决复杂的问题,并且可以快速适应不断变化的情况,但在基础实现上会带来很多复杂性。
许多决策算法很简单,表达为一个简单的表驱动程序,没有真正的规则引擎隐含的复杂性。
答案 8 :(得分:0)
我强烈推荐像Drools as open source或Commercial Rules Engine等业务规则引擎,例如LiveRules。
答案 9 :(得分:0)
我真的不明白一些观点,例如:
a)商业人士需要很好地了解业务,或者;
b)对商业人士的分歧不需要了解规则。
对我来说,作为一个刚刚接触BRE的人,BRE的好处就是让系统适应业务变化,因此它专注于适应变化。
如果在时间x设置的规则与在时间y设置的规则不同,是否重要,原因如下:
a)商业人士不了解商业,或;
b)商界人士不了解规则?
答案 10 :(得分:-2)
我不久前在博客上写过。
你可以在这里查看 - > http://www.codetoglory.com/?p=21
当你拥有像保险,交易和外汇领域一样不断变化的动态规则时,你应该真的使用它。
希望我的博客文章可以为您提供一些很好的概述。