有梦才叫青春

因为公司项目的需要,最近在研究drools,现在正在初步学习阶段,总结和转载一些文章以备学习以及共享。

一、什么是规则引擎呢?

Drools(JBoss Rules )具有一个易于访问企业策略、易于调整以及易于管理的开源业务规则引擎,符合业内标准,速度快、效率高。业务分析师或审核人员可以利用它轻松查看业务规则,从而检验是否已编码的规则执行了所需的业务规则。 JBoss Rules 的前身是Codehaus的一个开源项目叫Drools。最近被纳入JBoss门下,更名为JBoss Rules,成为了JBoss应用服务器的规则引擎。 Drools是为Java量身定制的基于Charles Forgy的RETE算法的规则引擎的实现。具有了OO接口的RETE,使得商业规则有了更自然的表达。

规则引擎由推理引擎发展而来,是一种嵌入在应用程序中的组件,实现了将业务决策从应用程序代码中分离出来,并使用预定义的语义模块编写业务决策。接受数据输入,解释业务规则,并根据业务规则做出业务决策。

二、规则引擎的优势

声明式编程

规则引擎允许你说“做什么”,不用说“怎样做”。

这点的主要优势是: 使用规则可以让困难问题的解决方案的表达, 以及这些解决方案的验证变得容易。

规则比代码更容易阅读。

规则系统有能力解决非常、非常困难的问题,对解决方案如何得出,每个“决定”向前的线路为何做出,提供了一个解释(利用其他的 AI 系统,如神经网络和人类大脑,没那么容易——我不知道为什么我擦破了车皮)。

逻辑和数据的分离

你的数据是在你的域对象中,你的逻辑是在规则中。这是从根本上打破了面向对象的数据和逻辑的耦合,这可能是一个优点,也可能是一个缺点,取决于你的视角点。结果是逻辑可能更容易维护,因为将来有变化,因为逻辑完全设置在规则中。如果逻辑是跨域或多域逻辑,这可能更是如此。而不是逻辑分散在域对象或控制器中,它可以完全在一个或多个独特的规则文件中被组织。

速度和可伸缩性

Rete 算法, Leaps 算法,及其派生物,比如 Drools 的 ReteOO,为你的域对象数据提供了非常有效的匹配规则模式的方法。当你使用较少变化的数据集时,特别有效,因为规则引擎可以记住过去的匹配。这些算法已被实战证明。

集中管理知识

通过使用规则,你创始了一个可执行的知识库(a knowledge base)。这意味着它是一个单点真相(asingle point of truth),例如,对业务策略。规则是这样完美可阅读的,所以也可以用文档服务。

工具集成

工具,比如 Eclipse(在将来,,基于网页的用户界面)提供了编辑和管理规则、立即得到反馈、验证和内容帮助的方法。也提供可用的审计和调试工具。

解释机制

规则系统,通过能够记录由规则引擎作出的决定,以及为什么作出决定,有效地提供了一个“解释机制”。

可理解的规则

通过创建对象模型,以及,可选择的,你的问题域模型的域特定语言,你可以自己设置来编写非常接近自然语言的规则。它们对可能非技术的域专家赋予了它们自身可以理解的逻辑,因为他们用自己的语言表达它们,所有程序的探求,技术决窍被隐藏于常规代码中, 适用的系统企业应用的ERP、CRM以及电子商务的销售系统及营销系统等

三、什么时候应使用规则引擎

对此最简捷的回答是:“在解决问题时,没有令人满意的传统编程方式。”给出这样简短的回答,需要进一步解释。为什么没有“传统”的方法,原因是以下之一:

问题只是对传统代码太琐碎(fiddle)。

问题可能不是很复杂,但是你可能不理解构建它的解决方案的耐脆性方式(non-fragile way)

问题超出了所有明显算法的解决方案。

解决一个复杂问题,没有明显的传统解决方案,或者基本问题没有完全理解。

逻辑经常变化。

逻辑本身甚至可能是简单的,但是规则变化相当频繁。在许多组织的软件版本中是少见的,并且可插式规则可以用一种合理安全的方式提供需要和期望的“敏捷性”。

域专家(或业务分析员)是乐意使用,而且是非技术的。

域专家常常处理有关规则和流程的大量知识。他们通常是非技术的,但是却非常有逻辑头脑的。规则可以允许他们用他们自己的术语表达逻辑。当然,他们仍然必须辩证思考,并具有逻辑思维的能力。在非技术岗位的大多人没有形式逻辑方面的训练,那么要小心与他们一起工作,因为在用规则系统化业务知识时,你常常会在当前理解业务规则和流程的道路上暴露出漏洞。如果规则对你的项目团队是一个新的技术,在进行中的管理费用必须考虑进来。 它不是一个普通技术,但是本文档试图让它更容易理解。通常在一个现代的面向对象应用程序中,你应该使用一个规则引擎,包含你的业务逻辑的主要部分,特别是真正凌乱的部分。这是封装所有逻辑在你的对象内的面向对象概念的一个颠覆(inversion)。

其实生命无论长短,只要我们能努力绽放出生命的光彩,便会拥有精彩的人生。

有梦才叫青春

相关文章:

你感兴趣的文章:

标签云: