码迷,mamicode.com
首页 > 其他好文 > 详细

规则引擎

时间:2014-05-19 22:32:33      阅读:350      评论:0      收藏:0      [点我收藏+]

标签:des   style   blog   class   c   code   

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

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

bubuko.com,布布扣

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

bubuko.com,布布扣
bubuko.com,布布扣
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
bubuko.com,布布扣
bubuko.com,布布扣

 

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

bubuko.com,布布扣

核心调用代码:

bubuko.com,布布扣
bubuko.com,布布扣
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");
            }
        }
        
    }
bubuko.com,布布扣
bubuko.com,布布扣

 

原理比较简单:

  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

规则引擎,布布扣,bubuko.com

规则引擎

标签:des   style   blog   class   c   code   

原文地址:http://www.cnblogs.com/aaa6818162/p/3731399.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!