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,我们将在下面的章节中给大家讲解。上面的图只是简单描述了决策树的意图。

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值