我有一个相当不错的使用规则引擎的优点列表,以及使用它们的一些原因,我需要的是一个不应该使用规则引擎的原因列表

到目前为止我拥有的最好的就是这个:

规则引擎并不是真正打算处理工作流程或过程执行的目的,也不是工作流引擎或旨在执行规则的流程管理工具。

还有其他不应该使用它们的重要原因吗?

有帮助吗?

解决方案

当我看到人们使用非常大的规则集时(例如,按单个规则集中的数千个规则的顺序),我会感到非常紧张。当规则引擎是坐在企业中心的单身人士,希望保留规则时,这通常会发生 干燥 将使它们可以访问许多需要它们的应用程序。我会无视任何人告诉我,带有许多规则的Rete Rules引擎被理解了。我不知道可以检查的任何工具以确保不存在冲突。

我认为将规则设置设置以使它们保持小是一个更好的选择。方面可以是在许多对象之间共享共同规则的一种方式。

我更喜欢尽可能简单,更多的数据驱动方法。

其他提示

我将从个人经验中给出两个示例,其中使用规则引擎是一个坏主意,也许会有所帮助: -

  1. 在过去的项目中,我注意到规则文件(项目使用的流口水)包含许多Java代码,包括循环,功能等。它们本质上是伪装成规则文件的Java文件。当我问建筑师的设计理由时,我被告知“规则从未打算由企业用户维护”。

: :它们被称为“业务规则”是有原因的,当您无法设计一个可以轻松维护/理解的系统时,请勿使用规则。

  1. 另一种情况;该项目使用规则,因为要求的定义不佳/理解和经常变化。开发团队的解决方案是广泛使用规则以避免频繁部署。

: :要求在初始发布更改期间往往会发生很多变化,并且不保证使用规则。当您的业务经常更改(不是要求)时,请使用规则。例如: - 随着税法法律的变化和使用规则的使用,每年都会改变税款的软件是一个绝佳的主意。当用户确定新要求时,Web应用程序的1.0版将经常更改,但会随着时间的推移而稳定。不要使用规则作为代码部署的替代方法。

我是业务规则引擎的忠实拥护者,因为它可以帮助您使您作为程序员更轻松地生活。我在研究数据仓库项目时所经历的第一个经验之一是找到包含整个页面上伸展的复杂案例结构的存储程序。这是一场噩梦,因为很难理解在这么长的情况结构中所应用的逻辑,并且要确定您是否在代码第1页的规则和第5页之间的规则之间重叠。总的来说,我们有代码中嵌入了300多个此类规则。

当我们收到新的开发要求时,对于所谓的会计目的地,涉及处理3000多个规则,我知道必须改变一些事情。那时,我一直在制作一个原型,后来后来成为现在的自定义业务规则引擎的父母,能够处理所有SQL标准运营商。最初,我们一直使用Excel作为创作工具,后来我们创建了一个ASP.NET应用程序,该应用程序将允许业务用户定义自己的业务规则,而无需编写代码。现在,该系统正常工作,很少有错误,并且包含7000多个规则来计算此会计目的地。我认为仅通过硬编码就不可能进行这种情况。用户很高兴能够定义自己的规则而不会成为其瓶颈。

尽管如此,这种方法仍有限制:

  • 您需要拥有对公司业务有很好了解的能力的业务用户。
  • 在搜索整个系统(在我们的情况下是数据仓库),有很大的工作量,以确定所有硬编码条件,这些条件有意义地转化为业务规则引擎处理的规则。我们还必须非常注意,这些最初的模板是由企业用户完全可以理解的。
  • 您需要使用一个用于规则创作的应用程序,其中实施了用于检测重叠业务规则的算法。否则,您最终会遇到一团糟,没有人会再了解他们获得的结果。当您在诸如自定义业务规则引擎之类的通用组件中有一个错误时,可能很难进行调试,并涉及广泛的测试,以确保现在有效的事情也可以正常工作。

有关此主题的更多详细信息可以在我写的一篇文章中找到: http://dwhbp.com/post/2011/10/30/implementing-a-business-rule-engine.aspx

总体而言,使用业务规则引擎的最大优势是,它允许用户恢复对业务规则定义和创作的控制,而无需每次需要修改某些东西时进入IT部门。它还减少了IT开发团队的工作量,现在可以专注于建立更多附加值的东西。

干杯,

尼古拉

我注意到的一句话是“双刃剑”是:

将逻辑交给非技术人员

当您在非技术方面有一个或两个多学科的天才时,我已经看到这项工作很棒,但是我也看到缺乏技术性导致膨胀,更多的错误,并且通常4x的开发/维护成本。

因此,您需要认真考虑您的用户群。

我以为亚历克斯·帕帕迪莫利斯(Alex Papadimoulis)的文章很有见地: http://thedailywtf.com/articles/soft_coding.aspx

这并不全面,但他有一些好处。

关于何时不使用规则引擎的精彩文章...(以及何时使用规则引擎)...

http://www.jessrules.com/guidelines.shtml

另一种选择是,如果您有一组线性规则,仅以任何顺序应用一次才能获得结果,则创建一个常规界面并让开发人员编写和部署这些新规则。优点是它非常快,因为通常您会传递 hibernate 会话或 jdbc 会话以及任何参数,这样您就可以以高效的方式访问所有应用程序数据。有了事实列表,可能会有大量的循环/匹配,这确实会降低系统速度......这是避免规则引擎并能够动态部署的另一种方法(是的,我们的常规规则部署在数据库,我们没有递归......它要么满足规则,要么不满足)。这只是另一种选择......哦,还有一个好处是新来的开发人员无需学习规则语法。他们必须学习一些groovy,但这非常接近java,所以学习曲线要​​好得多。

这实际上取决于您的背景。规则引擎有其用武之地,如果您的项目有规则,您可能希望动态部署这些规则,以实现不需要规则引擎的非常简单的情况,则上述只是另一种选择。

如果您有一个简单的规则集并且可以有一个 groovy 界面,那么基本上不要使用规则引擎......就像可动态部署和加入您团队的新开发人员可以比 drools 语言更快地学习它一样。(但这是我的观点)

根据我的经验,规则引擎在以下内容时最有效:

  1. 定义明确的学说为您的问题域
  2. 高质量(最好是自动化的)数据,以帮助推动大多数输入
  3. 访问主题专家
  4. 具有创建专家系统的经验的软件开发人员

如果缺少这四个特征中的任何一个,您仍然可能会发现一个规则对您有效,但是每当我尝试使用1时,我都会遇到麻烦。

这当然是一个好的开始。使用规则引擎的另一件事是,有些事情是充分理解,确定性和直率的。扣押是(或用过)这样的。你 可以 将其表示为将由规则引擎解决的规则,但是您可以表达与相当简单的值表相同的规则。

因此,当您表达具有持久数据的长期流程时,工作流引擎是好的。规则引擎可以做类似的事情,但是您必须做很多更复杂的事情。

当您拥有复杂的知识库并且需要搜索时,规则引擎是好的。规则引擎可以解决复杂的问题,并且可以迅速适应不断变化的情况,但对基本实施施加了很多复杂性。

许多决策算法足够简单,可以作为一个简单的表驱动程序表达,而没有真实规则引擎暗示的复杂性。

我强烈建议这样的商业规则引擎 流口水作为开源 或者 商业规则引擎 例如肝脏。

  • 当您拥有大量自然界波动的业务政策时,很难维持核心技术代码的一部分。
  • 规则引擎提供了框架的灵活性,并且易于更改和部署。
  • 规则引擎不会到处使用,而是在有很多定期更改的政策时需要使用的。

我真的不明白一些观点,例如:
a)商人需要很好地了解业务,或者;
b)对商人的分歧不需要知道规则。

对我来说,作为一个只是触摸Bre的人,BRE的好处就是让系统适应业务变化,因此它专注于自适应变化。
在时间x上设置的规则与在时间y时设置的规则不同,是否有关系。
a)商人不了解业务,或者;
b)商人不了解规则吗?

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top