引擎介绍 - REngine

时间:2022-09-05 13:55:31

引擎介绍 - REngine

规则引擎

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

个人理解

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

适用点举例

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

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

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

用法

以计算客户打折点为例:

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

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

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

性能

引擎介绍 - REngine

引擎介绍 - REngine

项目地址

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

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

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

  1. &period;Net规则引擎介绍 - REngine

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

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

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

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

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

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

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

  5. Fixflow引擎解析&lpar;一&rpar;&lpar;介绍&rpar; - 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. 数据库 --&gt&semi; 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. &lbrack;moka同学收藏&rsqb;网页上的&OpenCurlyDoubleQuote;返回上一页”的几种实现代码

    我们在制作网页的时候,经常在网页上要用到"返回上一页"的功能.这一功能在制作网页的时候会有多种编码方法,在此,笔者将比较常用的几种编码写作方法在下面列出来,供各位技术人员参考使用. ...

  2. java web sql注入测试&lpar;2&rpar;---实例测试

    以下篇幅,用一个简单的实例说明如何进行测试. 功能:根据用户NAME删除用户,采用的是SQL拼接的方式,核心代码部分如下: public static void deleteByName(String ...

  3. 让你了解x86的中断

    COPY FROM:http://zhan.renren.com/qdlinux?gid=3602888498000980107&from=post&checked=true 研究li ...

  4. char和QChar&lpar;Unicode的编码与内存里的值还不是一回事&rpar;

    char类型是c/c++中内置的类型,描述了1个字节的内存信息的解析.比如: char gemfield=’g’;那么在由gemfield标记的这块内存的大小就是1个字节,信息就是01100111,8 ...

  5. Appium&plus;python&plus;html生成饼图测试报告

    历时三周这个小框架终于正式运行了,git源码地址;https://github.com/jiyanjiao/AutoTEST/tree/master/qingqi_driver_app 报告如图:

  6. html5 postMessage解决跨域、跨窗口消息传递(转)

    仅做学习使用,原文链接:http://www.cnblogs.com/dolphinX/p/3464056.html 一些麻烦事儿 平时做web开发的时候关于消息传递,除了客户端与服务器传值还有几个经 ...

  7. 要使用myConfig&period;properties配置文件作为实体类的映射文件的话&comma;格式要用&equals;&comma;最关键的要和实例类中通过反射获取值的KEY要一样&comma;不样会反射取不到值

    ABC=https://fsdfsdf.iy.comABCId=L2345345ZhP345ABCKey=sfdf4234f234dhE6Ut0aABCName=Gassd010 上面是myConfi ...

  8. KNN和K-Means的区别

    KNN和K-Means的区别 KNN K-Means 1.KNN是分类算法 2.监督学习 3.喂给它的数据集是带label的数据,已经是完全正确的数据 1.K-Means是聚类算法 2.非监督学习 3 ...

  9. poj 1475 推箱子

    bfs是一层层的遍历下去,每多一层即为多走一步,因此只要遇到T就停,此时肯定是最小步数. 所以这两层bfs应为,先对箱子的最少步数进行bfs,从而求出推箱子所用最少步数: 然后箱子bfs内部嵌入人的b ...

  10. redis常用数据类型操作命令集锦

    redis操作命令集锦 redis中五种数据类型 1) 字符串 String 特点: 存储所有的字符和字符串 应用场景: 做缓存使用 2) 哈希 hash 特点: 相当于java中hashMap集合 ...