引擎介绍 - 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

自省推动进步,视野决定未来。
心怀远大理想。
为了家庭幸福而努力。
QQ群:283016070,实践 & 创新
 
分类: 架构可扩展

引擎介绍 - REngine的更多相关文章

  1. .Net规则引擎介绍 - REngine

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

  2. MySQL数据库引擎介绍、区别、创建和性能测试的深入分析

    本篇文章是对MySQL数据库引擎介绍.区别.创建和性能测试进行了详细的分析介绍,需要的朋友参考下   数据库引擎介绍 MySQL数据库引擎取决于MySQL在安装的时候是如何被编译的.要添加一个新的引擎 ...

  3. [转]MySQL数据库引擎介绍、区别、创建和性能测试的深入分析

    本篇文章是对MySQL数据库引擎介绍.区别.创建和性能测试进行了详细的分析介绍,需要的朋友参考下   数据库引擎介绍 MySQL数据库引擎取决于MySQL在安装的时候是如何被编译的.要添加一个新的引擎 ...

  4. 第1部分: 游戏引擎介绍, 渲染和构造3D世界

    原文作者:Jake Simpson译者: 向海Email:GameWorldChina@myway.com ---------------------------------------------- ...

  5. Fixflow引擎解析(一)(介绍) - Fixflow开源流程引擎介绍

    Fixflow引擎解析(四)(模型) - 通过EMF扩展BPMN2.0元素 Fixflow引擎解析(三)(模型) - 创建EMF模型来读写XML文件 Fixflow引擎解析(二)(模型) - BPMN ...

  6. H2Engine服务器引擎介绍

    H2Engine服务器引擎介绍 简介 H2Engine服务器引擎架构是轻量级的,与其说是引擎,个人觉得称之为平台更为合适.因为它封装的功能非常精简,但是提供了非常简洁方便的扩展机制,使得可以用C++. ...

  7. MySQL数据库引擎介绍、区别

    数据库引擎介绍 MySQL数据库引擎取决于MySQL在安装的时候是如何被编译的.要添加一个新的引擎,就必须重新编译MYSQL.在缺省情况下,MYSQL支持三个引擎:ISAM.MYISAM和HEAP.另 ...

  8. 数据库 --> MySQL存储引擎介绍

    MySQL存储引擎介绍 MyISAM是MySQL的默认数据库引擎(5.5版之前),由早期的ISAM(Indexed Sequential Access Method:有索引的顺序访问方法)所改良.虽然 ...

  9. Mysql数据库引擎介绍--转载

    引用博文链接:https:/www.cnblogs.com/zhangjinghe/p/7599988.html MYSQL数据库引擎区别详解 数据库引擎介绍 MySQL数据库引擎取决于MySQL在安 ...

随机推荐

  1. 全栈JavaScript之路(十七)HTML5 新增字符集属性

    HTML5 添加�了几个文档字符集属性. document.charset : 表示文档的实际使用的字符集. document.defaultCharset: 表示默认的字符集,跟浏览器以及操作系统设 ...

  2. Java泛型Restletclient

    写一个与restletserver通信的client类.用于測试通信是否成功.而且进行交互.为了方便其它人使用.于是,写一个通用的方法封装起来,但是中途却放生了一些问题. 依照正常写法,顺序走下来是这 ...

  3. codeforces #550E Brackets in Implications 结构体

    标题效果:定义集合中{0,1}\{0,1\}上的运算符"→\rightarrow",定义例如以下: 0→0=10\rightarrow 0=1 0→1=10\rightarrow ...

  4. phpword这个问题的产生中国扭曲

    采用phpword经word模板生成word当文件,乱码的问题.矿php和所有的数据库使用urf8编码格公式.解决的办法是,到场/phpword/template.php档,守则   $replace ...

  5. MySQL性能、监控与灾难恢复

    原文:MySQL性能.监控与灾难恢复 监控方案:     up.time    http://www.uptimesoftware.com/    收费     Cacti        http:/ ...

  6. 百度云BAE3.0 的ssh构造(本机ssh项目迁移到BAE3.0)

    依据百度云的java部署文档进行部署 http://developer.baidu.com/wiki/index.php?title=docs/cplat/bae/java 做例如以下改动,然后把项目 ...

  7. gem 安装nokigiri

    在mac上安装nokogiri的时候各种报错,终于安装成功一次,备份命令. ➜ ~ sudo gem install nokogiri -- --use-system-libraries --with ...

  8. linux处置服务Iptables

    一:Iptables防火墙服务 iptables分为两个部分:一个部分在内核中实现,一个为用户接口命令iptables,用户通过该命令来改动防火墙的功能.所以,iptables要使用对应的功能.必需要 ...

  9. Oracle SQL操作计划基线总结(SQL Plan Baseline)

    一.基础概念 Oracle 11g開始,提供了一种新的固定运行计划的方法,即SQL plan baseline,中文名SQL运行计划基线(简称基线),能够觉得是OUTLINE(大纲)或者SQL PRO ...

  10. cocos2dx 制作单机麻将(二)

    cocos2dx 制作单机麻将(二) 打乱麻将顺序2 前面解说了怎样打乱初始给定的麻将牌堆, 另一种是打乱随意给定的麻将牌堆 //混乱扑克2 void RandAppointCardData(BYTE ...