规则引擎-drools-1-基本概念

这篇没有什么实际的操作,对于刚接触drools的新手,可能名词也看不明白,不过没关系,就像看书一样,第一章基本上都看不懂。有个印象即可。
关于规则引擎,学习drools框架,个人的学习路线是,先百度一下,了解个基本概念,做出个demo来,然后去官网查看对应的文档说明(纯英文的,直接看官网还是有点费时间),帮助补充和理解网上的资料。
因此,鉴于本人能力有限,文章如果错误或瑕疵,欢迎留言指正。

规则引擎

规则引擎,全称为业务规则管理系统,英文名为BRMS(即Business Rule Management System)。规则引擎实现了将业务决策从应用程序代码中分离出来,接收数据输入,解释业务规则,并根据业务规则做出业务决策。规则引擎其实就是一个输入输出平台。
举个例子,某系统根据用户的年龄、性别、学历、消费金额、积分数量等来给用户分配默认vip等级,我们暂且称这个功能模块是《vip分配规则》。
代码实现方案,一般会用大量的 if else,即便用到了策略模式,代码可维护性加强,一旦vip分配规则发生变化了,都要去修改代码,然后上线、发版。
将类似《vip分配规则》这样的事情,独立业务之外,不仅是代码层面独立,而是将这一类的事情整个独立出来,这就是规则引擎要做的事情。规则引擎要做的事情,是将规则对主流程业务开发人员变得透明。

至于规则引擎是如何将规则独立出来的,每个框架实现方案都不同,本人也只学习了drools这一个开源框架,因此只谈一下drools。

drools

官网文档:
https://docs.drools.org/7.73.0.Final/drools-docs/html_single/index.html#_introduction

官网原文:
Drools is a business-rule management system with a forward-chaining and backward-chaining inference-based rules engine, allowing fast and reliable evaluation of business rules and complex event processing. A rules engine is also a fundamental building block to create an expert system which, in artificial intelligence, is a computer system that emulates the decision-making ability of a human expert.
翻译:
Drools是一个业务规则管理系统,具有基于前向链和后向链推理的规则引擎,允许快速可靠地评估业务规则和复杂事件处理。规则引擎也是创建专家系统的基本构件,在人工智能中,专家系统是模拟人类专家决策能力的计算机系统。

实际上drools经过多年的迭代和维护,目前它已经是KIE框架的一部分了。

kie架构

KIE (Knowledge Is Everything) is an umbrella project introduced to bring our related technologies together under one roof. It also acts as the core shared between our projects.
以下是官网的架构图,本文暂不做详细解释。后续若有精力再从源码层面去分析这个架构。
在这里插入图片描述

drools基本名词

drools是一款由JBoss组织提供的基于java语言开发的开源规则引擎开源框架,将复杂且多变的业务规则从硬编码中解放出来,以规则脚本的形式存放在文件或特定的存储介质中(如存放在数据库中),使得业务规则的变更不需要修改项目代码、重启服务器就可以在线上环境立即生效。

  1. drools工作内存
    规则引擎运行时,是把“规则脚本”加载到这部分内存中,从而进行规则匹配与执行的内存空间。
  2. Fact bean(事实)实体bean
    参与规则执行的对象,称为Fact bean。Fact bean要加载到工作内存中的。
  3. 规则
    一个执行条件,我们称为一个规则,以drl文件为例,一个 rule 键字对应的一段定义叫做一个规则。
    rule
    when
    then
    end
    在drl文件中,一个规则,这四个关键字不可少, 详细的内容,在下面的文章中给出解释。
    3.1 属性部分 Attributes
    rule之下,when之上的部分,是规则中的属性部分,可以定义规则的执行顺序、执行时间、分组、执行次数、定时器等。
    3.2 条件部分 LHS
    when之下,then之上的部分,是规则中的条件部分,定义该规则的触发条件,只有加载到工作内存中的fact bean 及参数能满足这部分的内容,才叫做匹配了该条规则,匹配之后,会执行 《结果部分 then》的代码。
    这部分可以为空。
    3.3 结果部分 RHS
    then之下,end之上的部分,是规则中的结果部分,定义该规则的触发之后的结果。
    举例:
rule "rule4"
    when
        $amount:Order(amount >= 1000)
    then
        $amount.setScore(1000);
        System.out.println("触发规则:大于1000,积分1000。");
end

以上代码,规则的关键字 rule、when、then、end,标记这是一条规则
其中
Order:定义的一个普通java类,也成为了Fact对象。
a m o u n t :绑定变量名,把整个 F a c t 对象定义给 amount :绑定变量名,把整个Fact对象定义给 amount:绑定变量名,把整个Fact对象定义给amount ,之后的then部分可以使用该变量。

$amount:Order(amount >= 1000)
意思是 当传入工作内存中的Order对象中的amount这个属性值 大于等于1000的时候,该规则被触发。

$amount.setScore(1000);
System.out.println(“触发规则:大于1000,积分1000。”);

意思是:当规则被触发时,执行给传入工作内存中的order对象的Score赋值1000,并打印"触发规则:大于1000,积分1000。"
如规则未触发,则什么都不执行。

本文基本概念先介绍几个简单概念。下篇文章写个demo,才容易理解。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值