Bla*_*erX 107 rule-engine
我有一个相当不错的使用规则引擎的优点列表,以及使用它们的一些原因,我需要的是你不应该使用规则引擎的原因列表
我到目前为止最好的是:
规则引擎并非真正用于处理工作流或流程执行,也不是用于执行规则的工作流引擎或流程管理工具.
你不应该使用它们的任何其他重要原因?
VDe*_*Dev 147
我将从个人经验中给出两个例子,其中使用规则引擎是一个坏主意,也许这会有所帮助: -
课程:出于某种原因,它们被称为"业务规则",当您无法设计可以由业务用户轻松维护/理解的系统时,请不要使用规则.
经验教训:在初始版本更改期间,需求往往会发生很大变化,并且不保证使用规则.当您的业务经常更改时(而非要求),请使用规则.例如: - 随着税法的变化,您的税收将逐年变化,并且规则的使用是一个很好的主意.随着用户确定新要求,Web应用程序1.0版将经常更改,但随着时间的推移会稳定下来.不要使用规则作为代码部署的替代方法.
小智 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开发团队的工作量,现在可以专注于构建具有更多附加值的东西.
干杯,
尼古拉·
Rob*_*uld 17
我注意到的一把"双刃剑"是:
将逻辑放在非技术人员手中
我已经看到这项工作很棒,当你在非技术方面有一两个多学科天才时,但我也看到缺乏技术性导致膨胀,更多的错误,并且通常是开发/维护成本的4倍.
因此,您需要认真考虑您的用户群.
Sma*_*ery 11
我认为Alex Papadimoulis的文章非常有见地:http://thedailywtf.com/articles/soft_coding.aspx
它并不全面,但他有一些好处.
Dea*_*ler 10
关于何时不使用规则引擎的伟大文章......(以及何时使用规则)....
http://www.jessrules.com/guidelines.shtml
另一种选择是,如果您有一组线性规则,只能以任何顺序应用一次以获得结果,即创建一个groovy接口并让开发人员编写和部署这些新规则.它的优点是速度快,因为通常你会通过hibernate会话或jdbc会话以及任何参数,这样你就可以以有效的方式访问所有的应用数据.使用事实列表,可能会有很多循环/匹配真的会降低系统速度.....这是避免规则引擎并能够动态部署的另一种方法(是的,我们的groovy规则部署在一个数据库,我们没有递归......它要么符合规则,要么没有.)这只是另一种选择.....哦,另外一个好处是没有为传入的开发人员学习规则语法.他们必须学习一些groovy,但这非常接近java,所以学习曲线要好得多.
这真的取决于你的背景.规则引擎有它们的位置,如果你有一个项目的规则,你可能想要为非常简化的情况(不需要规则引擎)动态部署,上面只是另一种选择.
基本上不要使用规则引擎,如果你有一个简单的规则集,而且可以有一个groovy接口......就像动态可部署一样,加入你的团队的新开发人员可以比drools语言更快地学习它.(但这是我的看法)
根据我的经验,当以下情况属实时,规则引擎效果最佳:
如果缺少这四个特征中的任何一个,你仍然可能会发现一个规则引擎适合你,但每次我尝试过甚至一个缺失时,我都会遇到麻烦.