专栏名称: java一日一条
主要是讲解编程语言java,并且每天都推送一条关于java编程语言的信息
目录
相关文章推荐
Java编程精选  ·  为什么不建议用 equals 判断对象相等? ·  昨天  
芋道源码  ·  Java 新魔法:利用 Function ... ·  17 小时前  
芋道源码  ·  300 秒到 4 秒,如何将 MySQL ... ·  昨天  
芋道源码  ·  用 Spring AOP 优化 IN ... ·  3 天前  
芋道源码  ·  DeepSeek 全面指南:95% ... ·  4 天前  
51好读  ›  专栏  ›  java一日一条

记一次框架设计经验--规则引擎

java一日一条  · 公众号  · Java  · 2018-11-27 08:20

正文

前面讲数据质量监控的时候,楼下很多评论希望能把规则引擎也讲一下,规则引擎是一个既复杂但又简单的系统,复杂的地方在于它要满足多种多样的 业务需求,需要知道各个事实的既定结果,然后通过既定公式获得最终需要的结果。


在开讲之前我们首先要了解几个名词:

facts 事实,我们实现的时候,会有一个事实库。用 F 表示。

patterns 模板,事实的一个模型,所有事实库中的事实都必须满足模板中的一个。用 P 表示。

conditions 条件 , 规则的组成部分。也必须满足模板库中的一条模板。用 C 表示。我们可以这样理解 facts patterns conditions 之间的关系。 Patterns 是一个接口, conditions 则是实现这个接口的类,而 facts 是这个类的实例。

rules 规则 ,由一到多个条件构成。一般用 and or 连接 conditions 。用 R 表示。

actions 动作,激活一条 rule 执行的动作。


举个贷款的例子:一个在国企工作名下有一套房的35岁已婚男士去银行贷款买车。按照正常思维,这个人工作稳定有持续的经济来源,在18周岁到56岁之间生活能够自理并且能持续还款,同时已婚代表有很大概率该客户责任心大,至少不会因为一些小挫折不还款,有担忧,就有保证,如果是我的话,肯定贷给他。


其实大家不可能根据一篇文章就会知道所有的规则引擎知识。从网上下了一张图,如下就是一个地址校验的规则,首先我们去判断是否满足一个地址的长度或者说非空,才会走入下一个规则校验行政区和经纬度是否一致:


其实理论知识大家都知道不少了,上边的几个名词就是每条规则抽象出来的元件,还有就是rete算法是规则引擎比较常用的算法,大家可以了解一下。







请到「今天看啥」查看全文