引擎介绍 - 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. 系统如何端子app弄root才干

    最近由于调试USB OTG怪东西.这导致USB端口被占用,这项.虽然我是project版本号,但不能运行adb shell,这是不可能的debug该. 所以,我现在是一个系统终端apk,规划 http ...

  2. 7 JavaScript Basics Many Developers Aren't Using (Properly)【转】

    JavaScript, at its base, is a simple language that we continue to evolve with intelligent, flexible ...

  3. JDK自带的监控分析工具JConsole

    非常多开发人员认为自己懂Java编程.事实是大多数开发人员都仅仅领会到了Java平台的皮毛.所学也仅仅够应付工作. 作者将深度挖掘Java平台的核心功能.揭示一些鲜为人知的事实.帮助您解决最棘手的编程 ...

  4. Cocos2d-Java安装和配置跨平台游戏引擎以及相关的开发工具

    假设认为博文图片不清晰.能够Ctrl+鼠标滚动缩放网页比例 Cocos2d-Java是什么? http://blog.csdn.net/touchsnow/article/details/387047 ...

  5. js Array 阵列扩展方法

    //又来了 Array.prototype.unique = function() { this.sort(); var re=[this[0]]; for(var i = 1; i < thi ...

  6. ecshop广告调用方法

    在简单地概括ecshop广告调用该方法,已发表在博客上,在这里,我们总结了以下 :就是官方默认的方法.先加入广告位,然后加入模板的广告位区域,再在将两者相应上. 1.后台 > 广告管理 > ...

  7. hdu 3911 Black And White(线段树)

    题目连接:hdu 3911 Black And White 题目大意:给定一个序列,然后有M次操作: 0 l r:表示询问l,r中最大连续1的个数 1 l r:表示将l,r区间上的数取反 解题思路:线 ...

  8. 标准SVD和改进的SVD

    参考链接:http://www.cnblogs.com/yangxiao99/p/4752890.html 参考链接:http://www.cnblogs.com/yangxiao99/p/47529 ...

  9. USACO dualpal

    /* ID:kevin_s1 PROG:dualpal LANG:C++ */ #include <iostream> #include <cstdio> #include & ...

  10. X86在逻辑地址、线性地址、理解虚拟地址和物理地址

    参考:http://bbs.chinaunix.net/thread-2083672-1-1.html 本贴涉及的硬件平台是X86.假设是其他平台,不保证能一一对号入座.可是举一反三,我想是全然可行的 ...