Drools规则引擎

您所在的位置:网站首页 引擎有什么作用 Drools规则引擎

Drools规则引擎

2024-06-01 18:22| 来源: 网络整理| 查看: 265

echo编辑整理,欢迎转载,转载请声明文章来源。欢迎添加echo微信(微信号:t2421499075) 交流学习。

上文我们说过,规则引擎其实就是将if else全部给抽离出来了。但是这就是我们的规则引擎的全部内容吗?规则放在哪里都是放,为什么一定要拿规则引擎来抽离呢?肯定是规则引擎给我们解决了某些问题。本文主要讲的就是规则引擎是解决什么的方案

为什么使用规则引擎? if else需要抽离不是目的也不是规则引擎有优秀的编码语法 从实例看问题

真实需求分析:新增用户,在新增用户的时候,根据用户的所在地打标记,比如:某用户是北京的,标记北漂,是广州的,标记广漂,依次类推。第一版需求我们看到的代码可能是这样的

if ("上海".equals(people.getAddress())) { people.setFlag("上漂"); peopleServer.insert(people); } if ("北京".equals(people.getAddress())) { people.setFlag("北漂"); peopleServer.insert(people); } if ("深圳".equals(people.getAddress())) { people.setFlag("深漂"); peopleServer.insert(people); } if ("广州".equals(people.getAddress())) { people.setFlag("广漂"); peopleServer.insert(people); } ... 感觉这些if else很多我们可以提炼一些公共的地方,同时根据规则,我们可以应用策略模式,或者责任链模式,来优化这样的层级结构。

上面的需求版本迭代:领导发现,某一地区的用户很多,比如:北京,如果说北京新增人员全都用北漂来标记,标记出来的用户将近十几万,这样子不利于数据分析和收益转化,于是乎,在北京这个地域的条件上加了个条件,年龄段,18-30标记‘北漂青年’,30-40,‘北漂实力户’等等。看到的代码可能就变成了这样了

if ("上海".equals(people.getAddress())) { people.setFlag("上漂"); peopleServer.insert(people); } if ("北京".equals(people.getAddress())) { if (people.getAge() > 18 && people.getAge() people.setFlag("北漂实力户"); peopleServer.insert(people); } ... } if ("深圳".equals(people.getAddress())) { people.setFlag("深漂"); peopleServer.insert(people); } if ("广州".equals(people.getAddress())) { people.setFlag("广漂"); peopleServer.insert(people); } ... 当需求变更只有,我们还能使用策略模式吗?还能使用责任链吗?注意到这里就有了一个很重要的问题,我这实例里面为了突出if else这样的规则,省略了业务代码,但是真实的开发当中,我们一般会在if else里面去写很多的对应的业务代码,根据我们的标记,来给用户推送,同时去编写推送策略和推送短信之类的。那再这样的情况下我们的设计模式就不在实用了。最关键的就是如果实用设计模式,整体的代码架构就失去了灵活性,共性的地方太多,如果规则再次变更,要更改的地方太多。 为什么版本迭代让我们的很多方式优化if else失去了作用? 很多地方不能解决规则和业务分离多数优化方式都不能直接或间接的灵活分配,很多都是利用共性抽离的规则迭代的时候,优化部分很容易出现牵一发动全身 规则引擎应用的话,能解决这样的问题吗? 规则引擎最大的作用就是灵活的将规则和业务剥离 总结

规则引擎,解决了灵活变更规则不影响具体业务的难点



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3