Go语言学习10 | 青训营笔记

73 阅读2分钟

什么是规则引擎

规则引擎由推理引擎发展而来,是一种嵌入在应用程序中的组件,实现了将业务决策从应用程序代码中分离出来,并使用预定义的语义模块编写业务决策。接受数据输入,解释业务规则,并根据业务规则做出业务决策。

举个例子:

在举行会员活动的时候有这样的需求,根据用户购买的商品价格和种类,赠送不同的积分。当商品价格小于100时,赠送20积分;当商品价格大于100小于500时,赠送80积分;当商品价格大于500时,赠送200积分。我们可以用if else语句实现对应的逻辑。

过了几天,运营部门决定修改活动规则,改为100-200赠送20,200-500赠送90,500-800赠送200……直到1w为止。此时我们可以通过结构体的方式来实现对应的功能。

    BeginPrice int
    EndPrice   int
    Points     int
}

func RewardsV2(price int,rules []reWards Rule) int{
    points :=0
    for _, rule :=range rules{
        if price >rule.BeginPrice &&price <rule.EndPrice{
            points = rule.Points
        }
    }
    
    return points
}

然后后面产品又脑洞大开了,觉得这个条件不够精细化,还要根据商品的标签属性,用户标签来判断。如果是新用户就乘二,如果商品是xx活动的特卖商品,积分就加多20。

若按照传统的开发模式,工作人员与代码的耦合度过高,每当规则需要改变的时候,就会需要较大的成本去修改代码。而规则引擎的出现可以让编码人员与代码解耦,使业务逻辑的变化对代码的影响降低

规则引擎编译原理

图片.png

  • 词法分析:将源代码中的字符串转换为词法单元
  • 语法分析:分析由词法单元组成的语句并识别该语句的语法结构

抽象语法树

表达式抽象语法结构的树状表示,对于一个表达式,抽象语法树一定是唯一确定的。抽象语法树采用递归向下算法,对于一个非终止符,会从左到右匹配产生式中的每一个项。

类型检查

验证执行的结果是否为合适的数据类型。在抽象语法树中,通常会验证某节点的子节点的数据类型是否合法