开发者论坛

 找回密码
 注册 (请使用非IE浏览器)
查看: 5409|回复: 1

.Net规则引擎介绍 - REngine

[复制链接]

0

精华

0

贡献

29

赞扬

帖子
23
软币
368
在线时间
25 小时
注册时间
2014-9-17
QQ
发表于 2015-3-12 17:33:34 | 显示全部楼层 |阅读模式
.Net规则引擎介绍 - REngine

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

个人理解
变化点过于集中在一点,为了适应变化,而给各种场景分别写了各自关于那点的代码逻辑,尽管主要的业务逻辑相同。

适用点举例
计算折扣,需要根据客户的积分决定打折点

工作流具体节点的路由控制

其他(希望大家补充下,想象力有限...)

用法
以计算客户打折点为例:

我们首先得新建一个规则文件,用来定义各个场景对应的折扣计算方式,如下:

复制代码
#region 折扣规则        //这个是规则名称,在C#代码中会使用到这个名称,此处为"折扣规则"
    rule default       //默认规则,必须存在,如果C#代码中指定的子规则名称没有找到,则默认应用default规则(有开关能设置如没有找到子规则是否报错)
        return 1;
    end rule
    rule A公司         //子规则名称,此处为"A公司"
        if(customerScore>=0&&customerScore<100)
            return 1;
        if(customerScore>=100&&customerScore<300)
            return 0.8;
        return 0.5;
    end rule
    rule B公司         //子规则名称,此处为"B公司"
        if(customerScore>=0&&customerScore<100)
            return 0.9;
        if(customerScore>=100&&customerScore<300)
            return 0.7;
        return 0.6;
    end rule
#endregion
复制代码


C#代码中,分几种情况 - 我就想调用默认规则:

var result = REngine.InvokeAsFloat("折扣规则", REngine.CreateParameter("customerScore", 220));


我想根据公司名称来调用折扣规则:

var result1 = REngine.InvokeAsFloat("折扣规则", "A公司", REngine.CreateParameter("customerScore", 220));

var result2 = REngine.InvokeAsFloat("折扣规则", "B公司", REngine.CreateParameter("customerScore", 220));

var companyId="A公司";//这里表示公司名来自变量
var result3 = REngine.InvokeAsFloat("折扣规则", companyId, REngine.CreateParameter("customerScore", 220));
很方便,简直太方便了。



那如果我根据companyId查找的子规则名称不存在,怎么办?我就想要具体的子规则决定规则,而不想要根据默认default规则,那该如何是好?别急,请看:

<appSettings>
    <add key="REngine.RulefilesPath" value="rules"/>
    <add key="REngine.ThrowExceptionIfNotfoundRule" value="1"/>
  </appSettings>
如果配置文件中设置了REngine.ThrowExceptionIfNotfoundRule参数为1,则代表如果没有找到具体子规则名,就会报错,不会应用默认default规则



介绍下REngine的API




性能






项目地址
REngine地址:https://github.com/daibinhua888/REngine

评分

参与人数 2赞扬 +2 收起 理由
1063256619 + 1 Thanks
gw850402 + 1 Thanks

查看全部评分

回复

使用道具 举报

0

精华

158

贡献

2488

赞扬

帖子
709
软币
9818
在线时间
1143 小时
注册时间
2013-8-1
发表于 2015-6-20 09:35:14 | 显示全部楼层
和R语言有何关系?
回复

使用道具 举报

Archiver|手机版|小黑屋|开发者网 ( 苏ICP备08004430号-2 )
版权所有:南京韵文教育信息咨询有限公司

GMT+8, 2024-12-22 09:53

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表