zoukankan      html  css  js  c++  java
  • 极其好用好学的规则引擎

    写了个简单的规则引擎,普通情况够用了:

    比如2家公司有各自的利率计算规则,如下:

    在C#方面,没有写在C#的业务逻辑代码中,而是移到了外部规则文件中,如(ACompanyRatePolicy.r):

    rule "Level 1"
        when
            alreadyCostPrice >= 0
            alreadyCostPrice < 100
        then
            rate = 1
    end
    rule "Level 2"
        when
            alreadyCostPrice >= 100
            alreadyCostPrice < 300
        then
            rate = 0.8
    end
    rule "Level 3"
        when
            alreadyCostPrice >= 300
        then
            rate = 0.5
    end

    不同的公司调用不同的Policy定义文件来执行逻辑:

    核心调用代码:

    public class CustomerRateService
        {
            public static decimal CalculateRate(decimal costedAlready, decimal priceThisTime, string rulePolicy)
            {
                using (RuleEngine engine = new RuleEngine(System.IO.Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "Rules")))
                {
                    engine.BindRule("Rating", rulePolicy);   //此处的第一个参数"Rating"是规则组名称,对应的是物理文件夹,方便规则文件的管理和查看
    
                    engine.SetParameter("alreadyCostPrice", costedAlready);
                    engine.SetParameter("thisTimePrice", priceThisTime);
    
                    engine.Process();
    
                    return engine.GetDecimal("rate");
                }
            }
            
        }

    原理比较简单:

    1. 根据规则文件(.r文件)生成js代码
    2. 在C#中嵌入v8引擎执行这段js代码
    3. 获取结果

    代码已经更新到A2D Framework了。

    大家拿去用吧。。。哈哈。

  • 相关阅读:
    (一)Redis初学教程之安装篇
    Redis常用数据类型
    css
    js常用内置对象、Dom对象、BOM对象
    CSS定位(postion)和移动(float)
    Razor模板引擎(C#版)语法
    虚拟化和反序列化
    id 自增------删除数据后恢复到删除前自增id
    SERVER全局数组
    文件路径操作
  • 原文地址:https://www.cnblogs.com/aarond/p/RuleEngine.html
Copyright © 2011-2022 走看看