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

问题场景

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

往kiesession里面传入fact,若是不作输入检查fact里面有些字段多是null值。可是若是在外面作输入检查,规则一改,fact所须要的字段不同了,输入检查也要跟着改,耦合比较强。有没有比较好的方法呢?

问题解答

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

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

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

减小耦合

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

增长判断

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

还有一种状况就是限定条件经过自定义一些函数来进行处理,好比得到fact对象以后将经过自定义的函数将其处理成预期的结果,而后再在then中作汇总。get

其余方法

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

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

相关技术视频

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

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

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

原文连接:http://www.choupangxia.com/20...

相关文章
相关标签/搜索