.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", ));
我想根据公司名称来调用折扣规则:
var result1 = REngine.InvokeAsFloat("折扣规则", "A公司", REngine.CreateParameter("customerScore", ));
var result2 = REngine.InvokeAsFloat("折扣规则", "B公司", REngine.CreateParameter("customerScore", ));
var companyId="A公司";//这里表示公司名来自变量
var result3 = REngine.InvokeAsFloat("折扣规则", companyId, REngine.CreateParameter("customerScore", ));
很方便,简直太方便了。
那如果我根据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
.Net规则引擎介绍 - REngine的更多相关文章
- 引擎介绍 - REngine
引擎介绍 - REngine 规则引擎 规则引擎由推理引擎发展而来,是一种嵌入在应用程序中的组件,实现了将业务决策从应用程序代码中分离出来,并使用预定义的语义模块编写业务决策.接受数据输入,解释业务规 ...
- SNF快速开发平台--规则引擎介绍和使用文档
设计目标: a) 规则引擎语法能够满足分单,计费,WMS策略的配置要求.语法是一致和统一的 b) 能够在不修改规则引擎模块的情况下,加入任意一个新的规则:实现上述需求之外的规则配置需求 c) 运算速度 ...
- Devs--开源规则引擎介绍
Devs Devs是一款轻量级的规则引擎. 开源地址:https://github.com/CrankZ/devs 基础概念 此规则引擎的基础概念有字段.条件.规则等. 其中字段组成条件,条件组成规则 ...
- SNF快速开发平台--规则引擎整体介绍及使用说明书
一.设计目标 a)规则引擎语法能够满足分单,计费,WMS策略的配置要求.语法是一致和统一的 b)能够在不修改规则引擎模块的情况下,加入任意一个新的规则:实现上述需求之外的规则配置需求 c)运算速度快 ...
- SNF快速开发平台--规则引擎在程序当中如何调用
规则定义完如何在程序当中进行使用呢? 其时很简单,只需要如下代码就可以调用程序: 规则定义: 调用代码: #region 演示2:生成左表数据(规则) POST: /api/DEMO/DemoSing ...
- Drools规则引擎
一.简介 Drools is a Business Rules Management System (BRMS) solution. It provides a core Business Rules ...
- QLExpress 规则引擎使用介绍
一个轻量级的类java语法规则引擎,作为一个嵌入式规则引擎在业务系统中使用.让业务规则定义简便而不失灵活.让业务人员就可以定义业务规则.支持标准的JAVA语法,还可以支持自定义操作符号.操作符号重载. ...
- Scala化规则引擎
1. 引言 什么是规则引擎 一个业务规则包含一组条件和在此条件下执行的操作,它们表示业务规则应用程序的一段业务逻辑.业务规则通常应该由业务分析人员和策略管理者开发和修改,但有些复杂的业务规则也可以由技 ...
- 【java规则引擎】之Drools之Rete算法
一:规则引擎--->规则引擎的核心是Pattern Matcher(模式匹配器).不管是正向推理还是反向推理,首先要解决一个模式匹配的问题.--->对于规则的模式匹配,可以定义为: 一个规 ...
随机推荐
- 斯坦福第四课:多变量线性回归(Linear Regression with Multiple Variables)
4.1 多维特征 4.2 多变量梯度下降 4.3 梯度下降法实践 1-特征缩放 4.4 梯度下降法实践 2-学习率 4.5 特征和多项式回归 4.6 正规方程 4.7 正规方程及不可逆性 ...
- 注意在<s:if test="#session.user.power==0">中不能用 <s:if test=$sessionScope.user.power==0">
获取封装在session的对象 用#session.对象名,可以获取对象 用#session.对象名.属性,可以获取属性. 注意在<s:iftest="#session.user.po ...
- Ajax跨域请求ashx文件与Webservice文件
前台页面: <%@ Page Language="C#" AutoEventWireup="true" CodeBehind="WebForm1 ...
- 解决修改密码报错‘passwd:Authentication token’
1.修改密码时报错: 错误信息:'passwd: Authentication token manipulation error' [root@localhost test]# ' | passwd ...
- Dynamic CRM 2013学习笔记(二十八)用JS动态设置字段的change事件、必填、禁用以及可见
我们知道通过界面设置字段的change事件,是否是必填,是否可见非常容易.但有时我们需要动态地根据某些条件来设置,这时有需要通过js来动态地控制了. 下面分别介绍如何用js来动态设置. 一.动态设 ...
- 大熊君说说JS与设计模式之------命令模式Command
一,总体概要 1,笔者浅谈 日常生活中,我们在看电视的时候,通过遥控器选择我们喜欢的频道时,此时我们就是客户端的角色,遥控器的按钮相当于客户请求,而具体执行的对象就是命令对象, 命令模式把一个请求或者 ...
- C#,Java,C -循环冗余检验:CRC-16-CCITT查表法
C#代码 using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace ...
- mongodb(二) 安装和使用
mongodb的安装和使用 最近的项目需要使用到mongodb,从而开始熟悉nosql,有了本篇文章,记录和方便他人. mongodb的安装 下载地址:http://www.mongodb.org/d ...
- [ACM_动态规划] POJ 1050 To the Max ( 动态规划 二维 最大连续和 最大子矩阵)
Description Given a two-dimensional array of positive and negative integers, a sub-rectangle is any ...
- dubbo配置文件报错解决思路
导入dubbo项目到Eclipse,配置文件报了如下异常: Multiple annotations found at this line: - cvc-complex-type.2.4.c: The ...