问题场景

在技术交流群(QQ:715840230)中有同学提出这样的问题:

往kiesession里面传入fact,如果不做输入检查fact里面有些字段可能是null值。但是如果在外面做输入检查,规则一改,fact所需要的字段不一样了,输入检查也要跟着改,耦合比较强。有没有比较好的方法呢?

问题解答

其实针对这种问题与规则引擎的关系不大,比较重要的还是要看业务逻辑。

比如对一个企业进行信用评级,涉及三个维度:企业年龄、企业注册资本与企业法人年龄。当然,在这个例子中各项值暂定为都是越高所得的评定分值越高。

就这个例子来解答一下上面的问题。从两个维度来讲:

减少耦合

如果想真正的减少耦合,那么可将三个维度的进行拆分,不放在一个fact对象中传入,而是三个规则,每个规则都计算对应的值,最终将结果逐个相加。使用这种方案,便不存在fact值为null的问题。

增加判断

如果是将三个业务的判断放在一个规则当中,那么对fact对象为null的情况就需要特殊处理了。比如在when中我们只获取类型为企业的fact对象,而不具体限定条件。这样只要是企业对象进入,都会被规则匹配,而具体的分值计算放在then部分进行处理。

还有一种情况就是限定条件通过自定义一些函数来进行处理,比如获得fact对象之后将通过自定义的函数将其处理成预期的结果,然后再在then中做汇总。

其他方法

那么,针对那位同学的问题,他想通过在插入fact对象之前进行校验排查,这其实是一种选择,选择默认属性为null的值的得分为0。针对他的这项疑惑,本人在交流群中给出的解答为:

不传这个值或忽略这个值,其实就是对这个值的一种处理。同样的,在规则中也可以这样处理,而且更灵活的处理。比如这个打分,如果某一项不传,那默认可能这一项就是0分,但如果传了null值,你可以在规则中对null进行处理,设置为0,你甚至还可以对null值进行处理,设置成负数。

相关技术视频

CSDN学院:《Drools7规则引擎进阶教程》

CSDN学院:《Drools7规则引擎入门教程》

CSDN学院:《Drools7系列优惠套餐》

原文链接:http://www.choupangxia.com/2019/07/26/drools%e8%a7%84%e5%88%99%e5%bc%95%e6%93%8e-%e5%a6%82%e6%9e%9cfact%e5%af%b9%e8%b1%a1%e5%8f%82%e6%95%b0%e4%b8%banull%e5%a6%82%e4%bd%95%e5%a4%84%e7%90%86/

Drools规则引擎-如果Fact对象参数为null如何处理的更多相关文章

  1. Drools规则引擎-如果判断某个对象中的集合是否包含指定的值

    规则引擎集合相关处理 在实际生产过程中,有很多关于集合的处理场景,比如一个Fact对象中包含有一个集合,而需要判断该集合是否包含某个值.而Drools规则引擎也提供了多种处理方式,比如通过from.c ...

  2. Drools规则引擎-memberOf操作

    场景 规则引擎技术讨论2群(715840230)有同学提出疑问,memberOf的使用过程中如果,memberOf之后的参数不是集合也不是数组,而是格式如"1,2,3,4"的字符串 ...

  3. Drools规则引擎实践直白总结

    目录 1. 创建Drools环境(引入Drools相关依赖包.现在都流行spring boot,故最简单有效的依赖才是最好的,kie-spring内部自行依赖了drools相关核心的依赖包) 2. 了 ...

  4. Drools 规则引擎应用

    规则引擎-drools 1 .场景 1.1需求 商城系统消费赠送积分 100元以下, 不加分 100元-500元 加100分 500元-1000元 加500分 1000元 以上 加1000分 .... ...

  5. Drools 规则引擎应用 看这一篇就够了

    1 .场景 1.1需求 商城系统消费赠送积分 100元以下, 不加分 100元-500元 加100分 500元-1000元 加500分 1000元 以上 加1000分 ...... 1.2传统做法 1 ...

  6. 线上故障排查——drools规则引擎使用不当导致oom

    事件回溯 1.7月26日上午11:34,告警邮件提示:tomcat内存使用率连续多次超过90%: 2.开发人员介入排查问题,11:40定位到存在oom问题,申请运维拉取线上tomcat 内存快照dum ...

  7. Drools规则引擎入门指南(一)

    最近项目需要增加风控系统,在经过一番调研以后决定使用Drools规则引擎.因为项目是基于SpringCloud的架构,所以此次学习使用了SpringBoot2.0版本结合Drools7.14.0.Fi ...

  8. drools规则引擎初探

    https://www.cnblogs.com/yuebintse/p/5767996.html 1.drools是什么 Drools是为Java量身定制的基于Charles  Forgy的RETE算 ...

  9. Drools 规则引擎环境搭建

    一.关于 drools 规则引擎 前面写过一篇 Drools 规则引擎相关的文章,这篇文章主要记录一下规则引擎的环境搭建和简单示例.不熟悉 drools 的朋友可以看看这篇文章: 自己写个 Drool ...

随机推荐

  1. BZOJ3144/LG3227 「HNOI2013」切糕 最小割离散变量模型

    问题描述 BZOJ3144 LG3227 还想粘下样例 输入: 2 2 2 1 6 1 6 1 2 6 2 6 输出: 6 题解 关于离散变量模型,我不想再抄一遍,所以: 对于样例,可以建立出这样的图 ...

  2. 2019阿里天猫团队Java高级工程师面试题之第一面

    2019阿里天猫团队Java高级工程师面试题之第二面 2019阿里天猫团队Java高级工程师面试题之第三面 1.五分钟自我介绍,说说自己的擅长及拿手的技术 自我介绍是为了考察面试者的语言表达和总结概括 ...

  3. IDEA 护眼色设置

    首先做一些简单的记录,护眼色 等等的设置很久以前机器上已经设置过了,今天偶尔要在其他机器上重新做一些设置反而忘记了很多步骤, 设置后的HTML页面如下图所示: 默认情况下,当只是设置General通用 ...

  4. table-layout:fixed

    table-layout: fixed; 在table上设置上面属性后,如果不设置td的宽度,那么所有td的宽度平分总table宽度.如果设置了td的宽度,则以设置的宽度为准. table-layou ...

  5. WPF TreeView 虚拟化-设置滚动到选中项

    前言 列表滚动到具体的数据项? ListBox提供了简易快捷的滚动定位函数ScrollIntoView. TreeView树状结构列表,则没有此类方法,无法与ListBox一样,直接设置滚动到具体的数 ...

  6. 企业架构如何实施的简介(TOGAF深度好文)

    本文来自企业架构学院: BangEA:如何实施企业架构? IT不仅是开展业务的手段,而且正在迅速演变为业务,IT绩效会直接影响企业的盈利能力,但很多企业并没有适时或充分的让IT组织参与业务的规划和决策 ...

  7. boostrap 学习笔记

    bootstrap : 是全球最受欢迎的前端组件库,用于开发响应式布局.移动设备优先的 WEB 项目. 用于项目样式的快速搭建,真的是..特别快.. 随便找两个cdn引用就能使用了. https:// ...

  8. 微信小程序之文件系统初探

    微信小程序之文件系统初探 1.文件下载 //下载文件 go_download: function() { var content = this; var baseUrl = "http:// ...

  9. PHP对URL进行字符串编码

    urlencode($url1) urldecode($url) //对URL进行字符串编码和解码 $url1 = 'https://www.baidu.com/uploade/img/123.png ...

  10. 读书笔记_python网络编程3_(2)

    2.UDP 2.0.数据包表示较短的信息,大小通常不会超过几千字节,在浏览器与服务器进行会话/电子邮件客户端与ISP的邮件服务器进行会话时,这些独立而小型的数据包是如何组成会话的呢? 2.0.1.IP ...