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

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

问题场景

在技术交流群(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系列优惠套餐》


目录
相关文章
|
5月前
@Autowired注解获取对象为null
@Autowired注解获取对象为null
51 0
|
5月前
|
SQL 存储 NoSQL
实时计算 Flink版产品使用合集之使用ParameterTool.fromArgs(args)解析参数为null,该怎么处理
实时计算Flink版作为一种强大的流处理和批处理统一的计算框架,广泛应用于各种需要实时数据处理和分析的场景。实时计算Flink版通常结合SQL接口、DataStream API、以及与上下游数据源和存储系统的丰富连接器,提供了一套全面的解决方案,以应对各种实时计算需求。其低延迟、高吞吐、容错性强的特点,使其成为众多企业和组织实时数据处理首选的技术平台。以下是实时计算Flink版的一些典型使用合集。
定义好变量,${age}模版字符串,对象可以放null,检验数据类型console.log(typeof str)
定义好变量,${age}模版字符串,对象可以放null,检验数据类型console.log(typeof str)
|
5月前
|
关系型数据库 MySQL 数据库
实时计算 Flink版产品使用合集之使用PostgreSQL作为源时,遇到before字段为NULL该如何处理
实时计算Flink版作为一种强大的流处理和批处理统一的计算框架,广泛应用于各种需要实时数据处理和分析的场景。实时计算Flink版通常结合SQL接口、DataStream API、以及与上下游数据源和存储系统的丰富连接器,提供了一套全面的解决方案,以应对各种实时计算需求。其低延迟、高吞吐、容错性强的特点,使其成为众多企业和组织实时数据处理首选的技术平台。以下是实时计算Flink版的一些典型使用合集。
|
5月前
|
SQL JSON Java
Java【问题记录 02】对象封装+固定排序+list All elements are null引起的异常处理+Missing artifact com.sun:tools:jar:1.8.0
Java【问题记录 02】对象封装+固定排序+list All elements are null引起的异常处理+Missing artifact com.sun:tools:jar:1.8.0
72 0
|
5月前
|
JavaScript 前端开发
JavaScript快速删除对象数组中某一个指定元素。注意:是对象数组,如果是数值数组,请慎用!会伤及无辜0、false、英文空格、undefined、null。
JavaScript快速删除对象数组中某一个指定元素。注意:是对象数组,如果是数值数组,请慎用!会伤及无辜0、false、英文空格、undefined、null。
|
XML Java 数据库连接
MyBatis参数映射问题解决教程: org.apache.ibatis.type.TypeException: Error setting non null for parameter #1 wit
MyBatis参数映射问题解决教程: org.apache.ibatis.type.TypeException: Error setting non null for parameter #1 wit
866 1
|
前端开发 Java
Java——Native Query设置null参数
Java——Native Query设置null参数
|
算法 Java 索引
为什么对象设置为Null的时候会利于GC的回收?
为什么对象设置为Null的时候会利于GC的回收?
155 0
为什么对象设置为Null的时候会利于GC的回收?
|
设计模式 uml
空对象模式(Null Object Pattern)
空对象模式(Null Object Pattern)不属于GoF设计模式,但是它作为一种经常出现的模式足以被视为设计模式了。其具体定义为设计一个空对象取代NULL对象实例的检查。NULL对象不是检查控制,而是反映一个不做任何动作的关系。这样的NULL对象也可以在数据不可用的时候提供默认的行为,属于行为型设计模式。
89 0