Drools——什么是规则

在这个章节,我们将会详细讲述业务规则:

  • 业务规则的定义和构成
  • 业务规则对于开发生命周期的重要性
  • drools等开发技术的使用以及其为组织中的开发人员和其他所有人能提供的工具

什么是规则

生活中我们每天都在被规则驱动。在开车的时候每当遇到红灯我们就会停下来,我们这样做就是在遵循当红灯亮时我们就要停下来的规则。同时我们也都知道这个规则,即当我们到达某个指定的年龄时便可以通过考试来获得驾照。

即使我们像胆大妄为的开发者,不遵守这些规则,但我们也会受到自然规则的限制。比如,如果你不呼吸,就会窒息;如果你跳起来,正如物理规则所规定的那样,引力会把你往下拉,最终你也将会落回地面。这些被深入研究过的规则(比如引力),可以使用简单的数学公式将它们表达出来。然而对于日常生活中我们认为是常识的规则,我们通常使用简单的结构来表达:当检测到一组条件的时候,我们将会做指定的动作。

when conditions  
do  actions     

随着处理的场景的复杂度的增长,这些结构的分类对于组织将会是非常重要。 这些场景由大量独立的简单的决策构成,这些决策协同工作以提供全方位的综合评估。这个综合评估开始先以简单的评估来决定我们调用推理的环境的本质。这些推理可能和其他的数据或推理产生交叉,直到可以实现和理解该领域的复杂视图,并且实现组织目的的行为可以被执行。                                     

这些存在组织的系统中的隐晦的规则,长期以来都是一个静态的结构。从一些大型的应用开始,随着时间的推移,web应用、中间件、服务的发展,这些解决方案通常跟系统的一部分高度耦合在一起。另一方面,业务规则应该允许以特定的、易于阅读和拆分的结构的方式来定义,这样对组织中的不同组都有意义——而不仅仅是只适合开发人员——可以快速自动的实现和更新。

规则基本结构

每个规则引擎都有特定的语法,且都有点小小的不同。尽管如此,这些原始的结构对于所有规则引擎都是通用的,它们看起来跟下面表示的都很相识:

when (a condition is found to be true )
then (an action is executed)

我们还可以在上面的结构中加很多我们能想到的语法糖。规则的基础结构就是这样由一系列的条件和动作组成。condition就是一条约束或者过滤器。这些过滤器将可以看到领域中的有用的信息,进而去尝试发现符合定义标准的数据。一旦获取到符合匹配条件的一组数据,就会将匹配数据作为参数,并计划执行后续动作。

condition的工作原理类似于query,通过特定的过滤器把指定领域中的数据不断缩小。这也意味着规则只能在特定的领域有意义:如果你的规则的设计为了过滤苹果,而你只向规则提供橘子,那么在这些规则中将永远匹配不到为真的condition。

这个结构大概就这么简单,它是所有规则的基础,我们也将会在这本书中看到它。由于这个结构,业务规则系统在复杂的场景比传统的代码具备巨大的优势。下个章节,我们将会解释那些优势。

声明式方法

业务规则系统是基于称为声明式编程的编程模式。这种编程模式支持你表达程序的逻辑,且无需明确的指定所要遵循的指令流。由于condition像filter一样工作,当数据被引入到有相匹配的condition的规则引擎中,规则或规则组就会被执行。也就是说,流程的控制既不是通过规则的顺序,也不是数据进入的顺序,而是规则声明的condition决定的。这种声明式方法允许被写出的很多规则不需要担心它们到底应该需要写在什么特定的地方。

命令式和声明式的实现

命令式编程是对我们平常生活中的编程模式的命名。这种编程模式一般都会使用Java、C#或其他的语言。它通过指令流的控制来定义的,我们明确的清楚每行代码何时会被执行。

另一方面,声明式方式不允许让程序员直接控制顺序流,而是由数据引导规则的执行。首先,这对语言来说,大概很难被掌握或者被认为是比较有用的特性。但是,我们将要看到Drools如何在基于Drools规则的声明性实现和基于Java的命令式实现之间实现非常有用的联合。

当然这些drools规则将要运行在java应用中,它在顺序流的什么位置以及什么时候被执行取决于代码。为了实现它,Drools规则引擎将业务规则转换了树,如下图所示:

正如你看到的图片中显示的那样,每条规则condition都被分为了一个小块,并用过树形结构进行连接和重用。每当数据提供给规则引擎,都会有跟这个类似的树进行评估,并最终会到达Action,此时将其标记为执行特定的规则做准备的数据。这种从业务规则到决策树的转化是可以实现的,因为规则结构很适合将它们自己标记为数据。也就是说规则代码可以很快的被转换成高效的决策树结构,并且可以在运行时进行改变和更新。能做到这些,正是因为通过更新树的结构可以轻松的实现Condition的更新、移除和增加。

小贴士:值得一提的是,上面的图只是一个简单的示例。真实的决策树会有更复杂的topic,我们将在下面的章节中给大家讲解。上面的图只是简单描述了决策树的意图。

下一个章节,我们将会讨论这些结构在复杂系统中对性能、稳定性、协作性非常有用的原因。

第一章 规则引擎初步了解 5 1 为什么会有规则引擎? 5 2 什么是规则引擎? 5 3 为何要使用规则引擎? 6 3.1 声明式编程 6 3.2逻辑与数据分离 6 3.3 速度及可测量性 6 3.4 知识集中化 6 3.5 工具集成 6 3.6 解释机制 6 3.7易懂的规则 7 4 何时应当使用规则引擎? 7 5 如何使用规则引擎? 7 6 何时不要使用规则引擎 ? 8 7 规则引擎的架构和推理 8 8规则引擎的算法 10 9 Java规则引擎商业产品 10 10 Dools介绍 11 第二章. Drools 规则引擎 11 2.1. 概述 11 2.2. 编制 13 2.3. RuleBase 18 2.4. WorkingMemory 和有状态/无状态Sessions 22 2.5. StatefulSession 28 2.6. StatelessSession 29 2.7. Agenda 31 2.8. Truth Maintenance with Logical Objects 34 2.9. 事件模型(Event Model) 37 2.10. 顺序模式 41 第三章. 安装和设置(Core 与IDE) 42 3.1. 安装和使用 42 3.1.1. 依赖库 42 3.1.2. 运行时(Runtime) 43 3.1.3. 安装IDE (规则工作台) 43 3.2. 从源码进行安装 54 3.3. 源码Checkout 54 3.4. 构建 59 3.4.1. 构建源码 59 3.4.2. 构建使用手册 61 3.5. Eclipse 65 3.5.1. 产生Eclipse项目 65 3.5.2. 导入Eclipse项目 66 3.5.3. 导出IDE插件 71 3.5.4. 构建更新站点 76 第四章. 决策表 78 4.1. 在电子表格中的决策表 78 4.1.1. 何时使用决策表 78 4.1.2. 概述 79 4.1.3. 决策表如何工作 81 4.1.4. 关键字和语法 83 4.1.5. 基于决策表建立并集成电子表格 87 4.1.6. 在决策表中管理业务规则 88 第五章. 规则工作台 (IDE) 89 5.1. Introduction 89 5.1.1. 特性概要 90 5.1.2. 建立规则项目 90 5.1.3. 新建规则向导 92 5.1.4. 规则编辑器 94 5.1.5. 视图 95 5.1.6. 领域规范语言DSL 98 5.1.7. The Rete视图 100 5.1.8. 大容量DRL文件 101 5.1.9. 调试规则 102 第六章. 规则语言 103 6.1. 概述 103 6.1.1. 规则文件 103 6.1.2. 规则的构成 104 6.1.3. 保留字 104 6.2. Comments注释 106 6.2.1. 单行注释 106 6.2.2. 多行注释 106 6.3. Package 107 6.3.1. import 108 6.3.2. expander 108 6.3.3. global全局变量 108 6.4. Function 110 6.5. Rule 111 6.5.1. Rule 属性 112 6.5.2. LHS (when) 条件元素 115 6.5.3. The Right Hand Side (then) 140 6.5.4. 对自动封箱/拆箱以及元数据类型的注解 141 6.6. Query 141 6.7. Domain Specific Languages 领域特定语言 142 6.7.1. 何时使用DSL 142 6.7.2. 编辑与管理DSL 143 6.7.3. 在规则中使用DSL 144 6.7.4. 增加对fact的约束 145 6.7.5. DSL如何工作 146 6.7.6. 从头开始建立DSL 146 6.8. 规则流 147 6.8.1. 设置规则所属的规则流组 148 6.8.2. 简单的规则流 148 6.8.3. 如何建立规则流 148 6.8.4. 在你的应用程序中使用规则流 153 6.9. XML规则语言 153 6.9.1. 何时使用XML 153 6.9.2. XML 格式 154 6.9.3. 遗留的Drools 2.x XML 规则格式 159 6.9.4. Automatic transforming between formats (XML and DRL) 159 第七章:部署和测试 160 7.1. 部署选项 160 7.1.1. 使用RuleAgent部署 160 7.1.2. 使用drl源码部署 161 7.1.3. 在你的classpath中部署规则 161 7.1.4. 可部署的对象RuleBase, Package等等. 161 7.1.5. 部署模式 163 7.1.6. Web Services 166 7.1.7. 未来的构想 166 7.2. 测试 166 7.2.1. 测试框架 166 7.2.2. FIT for Rules – 一种规则测试框架 166 第八章. BRMS (业务规则管理系统) 168 8.1. 简介 168 8.1.1. 什么是BRMS? 169 8.1.2. 特性概要 170 8.2. 管理指南 170 8.2.1. 安装 171 8.2.2. 数据库配置 172 8.2.3. 安全性 173 8.2.4. 数据管理 176 8.3. 体系结构 178 8.3.1. 从源码构建 179 8.3.2. 可重用组件 180 8.3.3. 版本和存储库 180 8.3.4. 贡献 181 8.4. 快速使用指南 181 8.4.1. 快速使用指南 181 8.4.2. BRMS 概念 183 8.4.3. The business user perspective 197 8.4.4. 部署: 将规则与你的应用集成 197 8.5. 例子与教程 200 8.5.1. 保险经济折扣 200 第九章. Java规则引擎API 202 9.1 简介 202 9.2 java规则引擎API体系结构 202 9.3 规则管理API 202 9.4 运行时API 203 9.5 java规则引擎API的安全问题 204 9.6 异常与日志 205 9.7 JSR小结 205 9.8 Dools API 参考 205 9.8.1 简介 205 9.8.2. 如何使用 205 9.8.3. 参考书目 209
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值