博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
.Net规则引擎介绍 - REngine
阅读量:6117 次
发布时间:2019-06-21

本文共 1576 字,大约阅读时间需要 5 分钟。

规则引擎

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

个人理解

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

适用点举例

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

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

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

用法

以计算客户打折点为例:

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

#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规则,那该如何是好?别急,请看:

 如果配置文件中设置了REngine.ThrowExceptionIfNotfoundRule参数为1,则代表如果没有找到具体子规则名,就会报错,不会应用默认default规则

 

 介绍下REngine的API

 

性能

 

项目地址

REngine地址:

 

转载地址:http://bhpka.baihongyu.com/

你可能感兴趣的文章
JavaWeb学习笔记(十四)--JSP语法
查看>>
【算法笔记】多线程斐波那契数列
查看>>
java8函数式编程实例
查看>>
jqgrid滚动条宽度/列显示不全问题
查看>>
在mac OS10.10下安装 cocoapods遇到的一些问题
查看>>
angularjs表达式中的HTML内容,如何不转义,直接表现为html元素
查看>>
css技巧
查看>>
Tyvj 1728 普通平衡树
查看>>
[Usaco2015 dec]Max Flow
查看>>
javascript性能优化
查看>>
多路归并排序之败者树
查看>>
java连接MySql数据库
查看>>
转:Vue keep-alive实践总结
查看>>
android studio修改新项目package名称
查看>>
深入python的set和dict
查看>>
C++ 11 lambda
查看>>
Hadoop2.5.0 搭建实录
查看>>
实验吧 recursive write up
查看>>
High-speed Charting Control--MFC绘制图表(折线图、饼图、柱形图)控件
查看>>
go test命令參数问题
查看>>