规则引擎简介

由于规则引擎的特殊性,其应用场景并没有像其他框架(spring,mybatis)较多,所以大家在选用规则引擎之前,往往都会有很多疑问,最经常会提出的几个问题就是:

  • 什么时候用规则引擎?
  • 规则引擎比在代码中编写if then有哪些优势?
  • 使用规则引擎的时候有哪些需要注意事项?

规则引擎的特点

使用规则引擎编写规则跟写业务代码或中间件代码有很大的不同,当然这些不同也是规则引擎的特点,使用规则引擎让你在编程的时候更关注于“什么时候,要做什么”(决策点的制定)。灵活规则冲突管理机制可以让规则的执行更加多变且可控,以此可以解决非常复杂的问题,对规则执行的路径进行记录,可以让问题的解决方式具有可追溯性。

规则引擎可以帮助你将逻辑和数据解耦,数据放入领域模型中,逻辑放入规则中(如果你的应用程序在使用规则引擎时并没有将逻辑和数据模型解耦,那么你可能就需要考虑下你的设计是否有问题)。

规则引擎会将规则集中化到知识库,这将会使逻辑更加集中化

什么时候使用规则引擎

总结来讲,当正常的开发模式或编程模式无法较好的解决当前的问题时,即可以考虑使用规则引擎。其实这句话说的比较抽象,有人肯定会问具体是什么时候呢?下面简单列举几点,来描述什么时候要使用规则引擎:

  • 当问题对于正常的开发模式或编程方式而言很繁琐,可能问题并不复杂,但却没有一个比较简单优雅的方式来解决它。
  • 当问题过于复杂的时候,无法找出一个明确的算法来解决的时候
  • 当问题的解决方案不断在发生变化的时候
  • 允许让领域专家(非技术人员)根据实际市场情况、业务场景自行解决的时候
  • 就编程而言,如果你的代码里有很多的if else switch以及大量的策略存在,而且它的逻辑可能会经常修改(可能是修复bug调整,可能正常业务变动的调整)

为了让大家更好的理解,这里举一个实际的业务场景:比如某大型超市举办万元现金抽奖活动,活动具体内容为,在7天内从客单价满99元的顾客中,抽出10位顾客作为中奖者。为了达到更好的活动效果,必须在活动第一天就有人中奖,活动的最后一天仍然有至少一个中奖名额,活动期间运营人员可以根据超市内的客流量来动态调整中奖概率(人越多的时候,有人中奖,活动效果将会呈指数级增长)。

使用规则引擎的注意事项

在不同的架构设计中,对规则引擎的使用是不同的,在单一应用架构中,你需要把规则嵌入到应用中,在大型的分布式应用场景中,你也可以将规则引擎当作一个公共服务存在,但此时对规则服务的设计将便会变得更加苛刻,特别是在将逻辑和数据方面需要彻底解耦,否则任何服务的业务数据的变动都将会对规则服务产生影响,这种影响是不必要的而且可能会让规则服务丧失可维护性并失去控制。

在设计之初除了规则和数据的解耦之外,规则与规则之间耦合关系也需要关注,因为规则之间的强耦合会导致应用越来越难维护但这里并不是说规则之间的弱耦合或解耦和就是好的,强耦合是不好的,适度设计)。

ps:规则之间的强耦合就是一个规则的触发肯定会导致另外一个规则触发。

所以如果你的团队刚刚接触规则引擎,那么请谨慎!!!

在使用规则引擎的时候,规则往往都是动态变化的,如何在生产系统动态的更新(增删改)规则也是比较重要的一点,因为实现的方式有很多种,但具体选择哪一种要根据实际的业务场景和架构设计进行权衡。

以下是在选择规则引擎时,关于规则引擎本身的核心架构实现注意事项

规则引擎最核心的部分就是推理引擎,推理引擎的好坏决定了程序在大量的规则和事实进行模式匹配的效率,所以在使用的时候请务必了解推理引擎的匹配模式匹配算法,目前常见匹配模式有前向链接和后向链接,匹配算法有Rete、Linear、Treat、Leaps。当有多个匹配结果时,规则引擎的冲突解决策略将会决定规则执行的灵活性,所以规则引擎的冲突解决策略是需要关注的一点。

以下是产生式规则系统的

 

还剩一个问题没明确回答,但是大家看完上面那些,关于规则引擎比在代码中编写if then到底有哪些优势,就不言而喻了把~~~

 

  • 5
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值