资讯专栏INFORMATION COLUMN

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

marser / 898人阅读

摘要:比如对一个企业进行信用评级,涉及三个维度企业年龄企业注册资本与企业法人年龄。增加判断如果是将三个业务的判断放在一个规则当中,那么对对象为的情况就需要特殊处理了。

问题场景

在技术交流群(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/20...

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/75611.html

相关文章

  • Drools规则引擎-memberOf操作

    摘要:今天这批文章就带大家了解一下规则引擎中比较操作符之一的。对象类代码调用规则引擎代码欢迎张三欢迎张三张三规则代码,这里模拟了两种场景的规则判断规则触发规则触发执行结果规则触发规则触发 场景 规则引擎技术讨论2群(715840230)有同学提出疑问,memberOf的使用过程中如果,memberOf之后的参数不是集合也不是数组,而是格式如1,2,3,4的字符串,那么Drools是否会讲其转...

    MrZONT 评论0 收藏0
  • Drools规则引擎-判断某个对象中的集合是否包含指定的值

    摘要:规则引擎集合相关处理在实际生产过程中,有很多关于集合的处理场景,比如一个对象中包含有一个集合,而需要判断该集合是否包含某个值。而规则引擎也提供了多种处理方式,比如通过等进行操作,比较。然后,通过关键字来遍历中的值,获得符合条件的。 规则引擎集合相关处理 在实际生产过程中,有很多关于集合的处理场景,比如一个Fact对象中包含有一个集合,而需要判断该集合是否包含某个值。而Drools规则引...

    yuxue 评论0 收藏0
  • Drools规则引擎-判断集合(List)是否包含集合

    摘要:问题场景在使用规则引擎时,有朋友会遇到这样的问题,就是在部分判断的两个参数都是集合类型,比如两个,此时要判断一个集合是否包含另外一个集合的内容。 问题场景 在使用Drools规则引擎时,有朋友会遇到这样的问题,就是在when部分判断的两个参数都是集合类型,比如两个List,此时要判断一个集合是否包含另外一个集合的内容。 拿一个具体的例子来说明,我的公众号《程序新视界》接受商务合作有一定...

    Cc_2011 评论0 收藏0

发表评论

0条评论

marser

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<