美文网首页
记工作中一个规则匹配引擎

记工作中一个规则匹配引擎

作者: 吃板栗的猫 | 来源:发表于2019-04-03 16:57 被阅读0次

    项目背景

    根据json模板中的属性来匹配实体的属性值,判断属性是否满足条件,从而进一步走不同的业务逻辑;
    优点:灵活性高,不用每次都改代码,参与只需动态配置json模板;

    举个例子:给满足会员生日条件的会员送礼物

    会员有birthday、mobile、等等等等属性
    jsonTemplate:"{"max_num":88,"type":1,"member":{"attribute":"birthday","compare":"><=","value":"1970-01-01"}}";
    jsonTemplate里面有birthday属性,而我们的会员实体里面也有这个属性,我们就可以比较实体的这个属性值是否与jsonTemplate里面的需要相比较判断是否满足条件;
    如果我们下次要改成匹配mobile这个属性,那么只需要修改这个jsonTemplate这个模板即可,代码就不用更改了,使用起来相当灵活;

    实现原理

    1.入参:Object实体、jsonTemplate字符串(根据业务场景不同,这里可变)
    2.得到jsonTemplate需要比较的属性名和值
    3.利用反射得到属性名字段并获取值作比较,判断是否满足条件即可

    一个简单的代码Demo
    Demo
    踩过的坑

    由于现在的项目采用的是Scala&Java,我这边传入的实体是Scala的case class类,刚开始运行的时候获取不到字段,后来改用了getDeclaredField,然后就正常了,然后就用反编译查看case class,果不其然,case class里面的属性默认都是被private修饰的,提供了getter setter方法,所以getField是获取不到的;
    下面是踩坑截图;


    Demo
    补充:由于比较规则是一个字符串,要转换为运算符需要如下操作,jdk1.8的特性
    image.png

    相关文章

      网友评论

          本文标题:记工作中一个规则匹配引擎

          本文链接:https://www.haomeiwen.com/subject/eiyzbqtx.html