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了。

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

    Description

    1. Cache System(本地缓存与分布式缓存共存、支持Memcache和Redis、支持贴标签形式(类似Spring 3.x的Cache形式))
    2. Event System(本地事件与分布式事件分发)
    3. IoC(自动匹配功能,实例数量限制功能)
    4. Sql Dispatcher System(基于Sql server的读写分离系统)
    5. Session System(分布式Session系统)
    6. 分布式Command Bus(MSMQ实现,解决4M限制,支持Session的读取)
    7. 规则引擎

    A2D Framework Web Site

  • 相关阅读:
    关于Faster-RCNN训练细节
    tensorflow 使用tfrecords创建自己数据集
    深度学习(tensorflow) —— 自己数据集读取opencv
    Tensorflow常见函数case argmax equal
    pandas dataframe类型操作
    celery 启动命令
    pipenv 虚拟环境新玩法
    拉取远程分支
    odoo 开发 context 上下文的用法
    odoo 二次开发的方法
  • 原文地址:https://www.cnblogs.com/aaa6818162/p/3731399.html
Copyright © 2011-2022 走看看