前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Drools规则引擎-如果Fact对象参数为null如何处理

Drools规则引擎-如果Fact对象参数为null如何处理

作者头像
程序新视界
发布2019-08-01 14:56:10
7540
发布2019-08-01 14:56:10
举报
文章被收录于专栏:丑胖侠

问题场景

在技术交流群(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规则引擎-如果fact对象参数为null如何处理/

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

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

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

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 问题场景
  • 问题解答
    • 减少耦合
      • 增加判断
      • 其他方法
      • 相关技术视频
      领券
      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档