前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >Drools使用dsl语言

Drools使用dsl语言

作者头像
程序新视界
发布于 2022-05-09 11:27:15
发布于 2022-05-09 11:27:15
1K00
代码可运行
举报
文章被收录于专栏:丑胖侠丑胖侠
运行总次数:0
代码可运行

Drools 为了对非开发人员更加友好,提供了dsl语言的支持,通过dsl再转换成drl文件来进行执行。

DSL简介

DSL == Domain Specific Language 以贴近业务领域的方式,即以类自然语言的方式来构造软件,使得我们不用花费太多精力就能看懂代码所对应的业务含义 。 它是创建规则语言的一种方式,致力于解决我们的问题域 。 DSL相当于一个转换器,它能将某一领域内的术语转换成规则语言。

Drools DSL背后的概念很简单。创建一个包含面向业务的概念的字典文件,并将其翻译成DRL。

定义DSL文件

基本内容格式如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
[when] There is a person = $p:Person()
[when] - id greater than {id:\d*} = id > {id}
[then] print = System.out.println("I am fired!")

上面就是一个简单的dsl文件的定义,它遵从如下语法格式:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
[<scope>][<type definition>]<dsl expression>=<replacement text>
其中
[when] or [condition] 定义的语法应用于LHS
[then] or [consequence] 定义的语法应用于RHS
[*]  以上两者都适用
[keyword] 关键字,比如no-loop这一类属性

使用DSL文件

新建dslr后缀的文件,里面的语法为:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
rule 'test-dsl'

when
    There is a person
    - id greater than 10
then
    print
end

执行dsl文件的转换

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
public class Demo14 extends BaseDemo {

	public static void main(String[] args) throws IOException, DroolsParserException {

		String dslContent = "[when] There is a person = $p:Person()\n" +
				"[when] - id greater than {id:\\d*} = id > {id}\n" +
				"[then] print = System.out.println(\"I am fired!\")";

		String dslrContent = "rule 'test-dsl'\n" +
				"\n" +
				"when\n" +
				"    There is a person\n" +
				"    - id greater than 10\n" +
				"then\n" +
				"    print\n" +
				"end";

		DefaultExpanderResolver resolver = new DefaultExpanderResolver(new StringReader(dslContent));

		DrlParser parser = new DrlParser();

		String string = parser.getExpandedDRL(dslrContent,resolver);

		System.out.println(string);

	}
}

打印出的结果为:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
rule 'test-dsl'

when
    $p:Person(id > 10)
then
    System.out.println("I am fired!")
end

就是正常写的drl文件的内容。

拓展

当然,也可以直接在dsls中通过expander来引入规则到dslr中,比如:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
rule 'test-dsl'
expander demo.dsl
when
    There is a person
    - id greater than 10
then
    print
end

然后通过kmodule.xml中像常规drl文件使用一样来使用dslr文件。

原文链接:http://www.choupangxia.com/topic/detail/97

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2019-01-24,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
Drools决策表的使用
Drools 决策表的使用 决策表简介 引用官方的话 决策表是一个“精确而紧凑的”表示条件逻辑的方式,非常适合商业级别的规则。 目前决策表支持xls格式和csv格式。决策表与现有的drool
程序新视界
2017/12/29
2.7K0
Drools决策表的使用
《Drools7.0.0.Final规则引擎教程》第3章 3.1 Hello World 实例
本文介绍了如何使用Drools规则引擎实现业务逻辑,通过一个具体的实例对Drools规则进行了介绍,包括规则定义、编译、解释执行和规则优化等步骤。同时,还介绍了Drools的配置文件kmodule.xml的用法。
程序新视界
2018/01/08
1.7K0
《Drools7.0.0.Final规则引擎教程》第3章 3.1 Hello World 实例
Drools规则模板使用之Excel
原文链接:http://www.choupangxia.com/topic/detail/98
程序新视界
2022/05/09
1.3K0
drools规则动态化实践
业务逻辑中经常会有一些冗长的判断,需要写特别多的if else,或者一些判断逻辑需要经常修改。这部分逻辑如果以java代码来实现,会面临代码规模控制不住,经常需要修改逻辑上线等多个弊端。这时候我们就需要集成规则引擎对这些判断进行线上化的管理
用户6256742
2024/06/01
5640
drools规则动态化实践
Drools - 规则引擎快速体验
Drools 是用 Java 语言编写的开放源码规则引擎,使用 Rete 算法(参阅 参考资料)对所编写的规则求值。Drools 允许使用声明方式表达业务逻辑。可以使用非 XML 的本地语言编写规则,从而便于学习和理解。并且,还可以将 Java 代码直接嵌入到规则文件中,这令 Drools 的学习更加吸引人 Hello World pom.xml <dependencies> <dependency> <groupId>org.springframework.boot</gro
十毛
2019/03/27
1.7K0
【Drools二】打工人学习Drools基础语法
学习语法之前先把项目结构搭建起来。使用IDE创建Maven项目,引入Drools依赖。上一篇文章中已经介绍一个实战,溪源在此篇文章再重复分享一下。 第一步:创建maven工程drools_quickstart并导入drools相关maven坐标
沁溪源
2020/11/24
2.1K0
Drools(BRMS) 速成教程(上)
大家在日常开发中,肯定遇到过一些业务规则变来变去的需求,比如:会员积分系统(今天要新注册会员送10积分,明天要改成注册送优惠券,后天搞活动要改成注册自动变成高级会员...),此类需求,一般都是通过写if分支来实现的,参考下面:
菩提树下的杨过
2018/09/20
1.1K0
Drools(BRMS) 速成教程(上)
【Drools】值得打工人学习的规则引擎Drools<一>
规则引擎:全称为业务规则管理系统,英文名为BRMS(即Business Rule Management System)。规则引擎的主要思想是将应用程序中的业务决策部分分离出来,并使用预定义的语义模块编写业务决策(业务规则),由用户或开发者在需要时进行配置、管理。 需要注意的是规则引擎并不是一个具体的技术框架,而是指的一类系统,即业务规则管理系统。 目前市面上具体的规则引擎产品有:drools、VisualRules、iLog等。 规则引擎实现了将业务决策从应用程序代码中分离出来,接收数据输入,解释业务规则,并根据业务规则做出业务决策。规则引擎其实就是一个输入输出平台。
沁溪源
2020/11/13
8.4K0
【Drools】值得打工人学习的规则引擎Drools<一>
这种场景你还写ifelse你跟孩子坐一桌去吧
if else,并不是一个非常坏的关键字,只不过有人把他用坏了。尤其在接到产品需求如下这样;
小傅哥
2020/07/14
7570
Spring Boot + 规则引擎Drools,强!
现在有这么个需求,网上购物,需要根据不同的规则计算商品折扣,比如VIP客户增加5%的折扣,购买金额超过1000元的增加10%的折扣等,而且这些规则可能随时发生变化,甚至增加新的规则。面对这个需求,你该怎么实现呢?难道是计算规则一变,就要修改业务代码,重新测试,上线吗。
码猿技术专栏
2023/05/01
2.4K0
Spring Boot + 规则引擎Drools,强!
《Drools7.0.0.Final规则引擎教程》第5章 session使用说明
该文介绍了Drools 7.0.0.Final规则引擎的session使用,包括有状态session和无状态session,并通过具体示例讲解了如何使用规则引擎进行数据处理。
程序新视界
2018/01/08
1.9K0
【Drools三】打工人学习Drools高级语法
global关键字用于在规则文件中定义全局变量,它可以让应用程序的对象在规则文件中能够被访问。可以用来为规则文件提供数据或服务。
沁溪源
2020/11/24
2.6K0
这种场景你还写ifelse你跟孩子坐一桌去吧
作者:小傅哥 暖暖的春风迎面吹,桃花多多开 小傅哥 | https://bugstack.cn 沉淀、分享、成长,专注于原创专题案例,以最易学习编程的方式分享知识,让自己和他人都能有所收获。目前已完
小傅哥
2020/03/09
9450
这种场景你还写ifelse你跟孩子坐一桌去吧
规则引擎Drools在贷后催收业务中的应用
在日常业务开发工作中我们经常会遇到一些根据业务规则做决策的场景。为了让开发人员从大量的规则代码的开发维护中释放出来,把规则的维护和生成交由业务人员,为了达到这种目的通常我们会使用规则引擎来帮助我们实现。
2020labs小助手
2022/11/29
1.6K0
drools 手动创建kmoudle.xml文件
@Test public void test() { KieServices kieServices = KieServices.Factory.get(); KieResources resources = kieServices.getResources(); KieModuleModel kieModuleModel = kieServices.newKieModuleModel();//1 KieBaseModel baseM
ydymz
2018/09/10
1.5K0
规则引擎之drools入门
现实生活中,规则无处不在。对于某些企业级应用,诸如欺诈检测软件,购物车,活动监视器,信用和保密应用之类的系统,经常会有大量的、错综复杂的业务规则配置,而且随着企业管理者的决策变化,这些业务规则也会随之发生更改。我们开发人员不得不一直处理软件中的各种复杂问题,不仅需要将所有数据进行关联,还要尽可能快地一次性处理更多的数据,甚至还需要以快速的方式更新相关机制。
lyb-geek
2018/07/26
5.2K0
规则引擎之drools入门
规则引擎从入门到实践
小明是一个兢兢业业的服务端程序员,有一天产品经理找到他说,我们要给用户发一条消息,消息的内容按照用户的积分分为三档,1000 以下的用户发:
用户3147702
2022/06/27
1.4K0
规则引擎从入门到实践
《Drools7.0.0.Final规则引擎教程》第4章 Query查询之基础
本文介绍了Drools规则引擎的基础知识,包括其使用场景、语法、规则文件等内容,并通过实例讲解了如何在实际项目中使用Drools规则引擎。
程序新视界
2018/01/08
9920
《Drools7.0.0.Final规则引擎教程》第4章 Query查询之基础
drool-6.5的自学demo
先丢代码地址 https://gitee.com/a247292980/drools 再丢pom.xml <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
ydymz
2018/09/10
4740
drool-6.5的自学demo
《Drools7.0.0.Final规则引擎教程》第3章 3.2 KIE API解析
本文介绍了Drools规则引擎的基本概念、核心组件、基本用法和高级用法,包括KieSession、KieBase、KieRepository等,并介绍了基于Maven的规则引擎配置示例。
程序新视界
2018/01/08
2K0
《Drools7.0.0.Final规则引擎教程》第3章 3.2 KIE API解析
相关推荐
Drools决策表的使用
更多 >
领券
社区富文本编辑器全新改版!诚邀体验~
全新交互,全新视觉,新增快捷键、悬浮工具栏、高亮块等功能并同时优化现有功能,全面提升创作效率和体验
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文