当前位置: 首页 > news >正文

做网站和编程序免费虚拟服务器

做网站和编程序,免费虚拟服务器,广点通,竞赛网站开发业务开发过程中,对于某些判断性的通用规则是基于if-else封装,还是基于策略模式封装?无论以上那种封装出来的方法,只能在单体软件包中共用,且不能无感部署,然而对于业务而言,可能规则改变的比较频…

业务开发过程中,对于某些判断性的通用规则是基于if-else封装,还是基于策略模式封装?无论以上那种封装出来的方法,只能在单体软件包中共用,且不能无感部署,然而对于业务而言,可能规则改变的比较频繁,例如与营销有关的活动,会频繁的修改商品价格的判断,不断的修改规则,在业务划分上,这类的业务功能被称为风险控制,因此学习规则文件以及加载执行规则文件的规则引擎则是我自己对于风险控制领域业务领域理解的必要前提。

Drools语法

package 逻辑包名 
dialect 方言名称
import 导入的需要进入规则的对象类型(如需规则使用则要预先将其存入引擎内存)function 函数名称(args){脚本语句...}query 查询名称(与规则名称一致需要为双引号包裹)(args){$result: 规则Pattern
end
}rule “规则名称”
attributes (属性说明,例如no-loop防止死循环)
whenLHS
thenRHS
end

LHS关键语法释义

LHS部分为空语句时,自动翻译成eval(true)直接通过条件判断进入RHS执行流程。值得一提的是eval()语句内部支持任何可以执行的语句,只要它执行的结果会返回一个布尔类型的值。

LHS部分为类似$user:User(age >= 18)语句时,其意为拿到引擎内部的Working memory 中类型为导入的User的相应Fact对象并匹配age大于等于18的对象,如果存在则返回true反之返回false,同时支持多个类似的属性匹配语句:例如$user:User( age >= 18 and name = ‘name’)

LHS满足的条件限制语句包含:and、or、||、&&以及not、in、exists、forall、from、collect、accumulate等。

RHS关键语法释义

通常来看RHS是通过条件判断时,需要执行的逻辑代码,不应该存在判断逻辑。

推荐JAVA业务逻辑触发方式:

  1. 编写SpringHolder静态导入Bean对象,执行需要执行的service代码。
  2. 删除部分适配的fact对象,脚本外部编写监听器监听对象消除时执行业务逻辑。
  3. 注册规则引擎自带的Channel实现channels[通道名].send()发送消息,同时Java代码内部订阅此通道即可。

规则引擎提供的快速访问修改working memory内存对象中的方法有:新增insert、修改update、删除retract。其次提供外宏对象drools调用更多API,kcontext宏对象直接访问运行时working memory内部的fact对象。

函数function用法释义

需要注意的是drools自带的function函数类似于JavaScript中的函数,但是在规则引擎中,一般的function函数需要返回一个布尔类型或者带返回类型,规范用法则是在LHS中使用eval(function(args))进行使用。

查询query用法释义

这里的查询代码相当于LHS部分,只是它需要以end结束,告知引擎本次查询结束,可以接收返回值,根据返回值决定后续流程。

query ”query_user_name“(arg){$user: User(name = arg)
end  
}

注:global关键字与Java中的final static基本一致,在同一个session中可以全局共享使用。

针对Drools属性的说明

位置在举例代码中的attributes即是Drools规则的属性

常见的属性配置有:Salience优先级(规则的优先级越高越先执行,默认为0)、no-loop(防止规则的死循环执行,值为false时可能会由规则引擎循环执行)、date-effective(日期计划,当日期到达后面的值时才会执行规则)、date-expires(日期比较,当日期超过后面的日期时才会执行)、Dialect(定义规则中的方言类型,一般分为eval与java)、Enable(规则是否启用)、lock-on-active(规则限制只运行一次)、activation-group(规则分组)。

Drools核心类型说明

  1. fact:类似于Java对象的引用,如果调用kieSession.insert( javaBean对象)方法,那么就会在working memory中插入一个JavaBean对象的引用。这个fact指的就是这次插入JavaBean的引用对象(引用对象即为装着源对象地址的对象,访问时直接拿到地址访问源对象)
  2. KieServices:类似于规则引擎提供的操作中心,通过它来获取的各种对象来完成规则构建、管理和执行等操作(通过KieServices.Factory.get() 获得)
  3. KieBase:可以理解为一个知识仓库,包含了若干的规则、流程、方法等,在 Drools 中主要就是规则和方法,KieBase 本身并不包含运行时的数据之类的,如果需要执行规则 KieBase中的规则的话,就需要根据 KieBase 创建 KieSession(通过KieContainer.getKieBase() 或 newKieBase()获得)
  4. KieContainer: KieBase 的容器,利用 KieContainer 来访问 KBase 和 KSession 等信息;(通过KieServices.newKieContainer()获得)
  5. KieSession:跟 Drools 引擎打交道的会话,基于 KieBase 创建,它会包含运行时数据,包含“事实 Fact”,并对运行时数据事实进行规则运算;分为两类:有状态的 KieSession(在多次与规则引擎进行交互中,维护会话的状态)、无状态的 StatelessKieSession(隔离了每次与规则引擎的交互,不会维护会话的状态)(通过KieBase.newStatelessKieSession() 或 newKieSession()获得)
  6. KieRepository:单例对象,它是一个存放 KieModule 的仓库
  7. KieProject:KieContainer 通过 KieProject 来初始化、构造 KieModule,并将 KieModule 存放到 KieRepository 中,然后 KieContainer 可以通过 KieProject 来查找 KieModule 定义的信息,并根据这些信息构造 KieBase 和KieSession
  8. ClasspathKieProject:ClasspathKieProject 实现了 KieProject 接口,它提供了根据类路径中的 META-INF/kmodule.xml 文件构造 KieModule 的能力,也就是我们能够基于 Maven 构造 Drools 组件的基本保障之一

设计实现运行Drools规则引擎的方法

  1. java硬编码嵌入规则到Java程序中,利用KieHelper().addContent(DRL硬编码字符串,ResourceType.DRL).build方法获取一个KieBase对象,通过KieBase对象获取KieSession会话,通过KieSession对象的execute方法传入判断的JavaBean运行。
  2. 创建规则文件夹,动态的利用Resource类获取文件对象,利用KieHelper对象的addResource方法传入规则文件resource对象,后续与(1)类似。
  3. 设计创建spring-drools.xml文件,将规则文件夹全部添加进配置文件中。后续利用注解配置类即可:
@Configuration
@ImportResource("classpath:spring-drools.xml")
public class DroolsBeansConfig {}

设计可实现的风控系统架构

主体思路:将规则条件封入字典表或枚举中,所有的规则导入规则表中,实例化配置javaBean,专门执行规则的加载与执行。

待更新......

相关资料

Maven依赖:

<dependency><groupId>org.kie</groupId><artifactId>kie-spring</artifactId><version>7.55.0.Final</version>
</dependency>

http://www.yayakq.cn/news/896937/

相关文章:

  • 电商网站里的水果图片怎么做的人力资源公司外包
  • 网络营销做得比较成功的案例最新站长seo网站外链发布平台
  • wordpress怎么上传自己的网站吗WordPress网站代码修改
  • 空投糖果网站开发大气家具行业商城类公司网站织梦模板
  • 网站 域名 授权服务器 分布式推广营销企业
  • 微信php网站开发流程ui设计自学网站推荐
  • 公司网站建设分录去哪里找空间做网站
  • shuwon-成都网站建设-成都网站制作-成都网络公司-蜀美网络制作网页时用的最多的是
  • wordpress修改页面温州网站优化定制
  • 企业做网站价格监理建设协会网站
  • 科技资讯网站有哪些建网站需要什么编程技术
  • 30分钟seo网站合肥营销型网站
  • 墨客网站建设xcyxqc品牌网站建设S苏州
  • 做亚马逊有看数据的网站吗南通模板建站多少钱
  • 厦门网站建设代理郑州石凡平面设计有限公司
  • 西安商城类网站制作小微平台
  • 网站建设新的开始奉贤区网站建设
  • 邢台路桥建设总公司网站松原市网站建设
  • 网站基本特点上海地区网站设计
  • 招聘网站排行榜2021做网站能赚能去什么公司
  • 猪八戒 网站开发支付汕头seo排名公司
  • 四川省建设岗位注册中心网站线上销售怎么做推广
  • 建站平台步骤详解网址源码在线查看
  • 如何查网站外链食药监局网站建设方案
  • 北京网站推广排名东丽天津网站建设
  • 企业建站套餐价格表网站开发需求图
  • logo设计网站免费无水印做博客网站用什么模板
  • 郑州网站推广单位多语言网站如何开发
  • 工信部网站备案查通知网站开发猪八戒
  • 淘宝网页设计模板html百度搜索关键词排名优化推广