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

  • 相关阅读:
    java spring-WebSocket json参数传递与接收
    java实现zabbix接口开发
    Linux 系统中的MySQL数据库默认区分大小写
    获取Linux下的IP地址 java代码
    Java多线程问题总结
    Easyui之accordion修改Title样式,字体等
    机器学习算法随机数据生成
    神经网络MPLClassifier分类
    给定数据利用神经网络算法模型进行计算
    vue $refs获取dom元素
  • 原文地址:https://www.cnblogs.com/aaa6818162/p/3731399.html
Copyright © 2011-2022 走看看