使用CKRule规则引擎处理多变业务
1, 多变业务
开发系统时,有没有试过下面的情况,如果你试过,那可以考虑一下使用规则引擎了。
|
序号 |
问题 |
举例 |
|
1 |
业务规则来自于一个或多个表格 |
商店的会员积分表,停车场的计费标准,快递费的计算表,客户信用评分表 |
|
2 |
业务规则是客户自己写的,难以结构化。 |
工资计算办法,生产配方计算,保险计算,公式系统。 |
业务规则来自于表格,一般情况下表格有多个列,而这些列之间有条件和结果关系。如:
|
积分 |
会员等级 |
打折 |
|
0-100 |
普通会员 |
-- |
|
100-1000 |
白银会员 |
0.99 |
|
1000-5000 |
黄金会员 |
0.9 |
|
5000~ |
VIP |
0.85 |
这三列中,积分和会员等级就是条件,而打折往往就是结果,通常都是通过条件找到结果,上述表格可以用数据表保存起来,但这个做法真不提倡,上表也许是用户随手搞的,可能过一两个月就会变。
这些基于表格的规则,可以理解为结构化的规则。
但用户常常都会有非结构化的规则要求软件公司实现的,如上表,客户增加如下要求:A,入黑名单的会员不打折,B,3月8日妇女节,女会员折上折98,C,商品X不参与打折。
那就不是表格式的规则了,可以理解为非结构化的规则。
事实上,非结构化的规则,简直就是用户随手编写的公式,也许很多会员系统已经处理了这些问题,但对于小开发团队或行业经验还不够丰富的团队来说,上面的要求就是“变态”,因为自己实现不了。
2,规则引擎
规则引擎就是为了处理复杂多变的业务而出现的,而把这些变化封装到规则引擎中,提供通用的接口,让实施人员或客户在不改变低层代码的前提下,可以比较简单地改变规则。
CKRule规则引擎并不是使用rete算法实现的,而是使用编译,即规则都是代码来实现,基于.Net4.0的C#语言编写的。
上面的问题,规则引擎都处理得非常好。对于表格式的数据,可定义决策表进行处理,对于非结构化的规则,就直接编写公式来处理。对表格式数据,需要先标出条件列和结论列,引擎扫描每一行数据,用条件列来判断条件是否正确,如果成立就执行结论列的数据。
而针对非结构化的规则,开发员可以在引擎中定义非常简化的关键字,对比逻辑和结论操作。并在业务系统调用这些定义,开发出适合当前业务系统的界面,提供友好,简单的公式编辑。在CKRule中,非结构化规则被称为客户规则池,其架构图如下:

从上图中,可以清楚看到,终端用户始终在业务系统上面操作非结构化的公式编辑,和测试编写的公式,保存之后被放在数据库中,终端用户是不需要与引擎直接接触的,这一特点就是强大的客户规则池功能。
即使你遇到再无厘头的业务规则要求,都可以在引擎中编辑好基础的元数据,然后在你的业务系统中编辑公式。这些公式是使用C#编译的,你可以非常简单地改变任何业务规则。如果开发员定义的关键字,比较逻辑和结论逻辑足够完善或客户公式足够简单,那把客户规则完全交给客户来编写,是绝对可行而且非常节约成本的事。
想了解CKRule的体系结构,案例和下载应用,请查看:
使用CKRule规则引擎处理多变业务的更多相关文章
- .Net Core 环境下构建强大且易用的规则引擎
本文源码: https://github.com/jonechenug/ZHS.Nrules.Sample 1. 引言 1.1 为什么需要规则引擎 在业务的早期时代,也许使用硬编码或者逻辑判断就可以满 ...
- [z]规则引擎
https://www.ibm.com/developerworks/cn/java/j-drools/ 使用声明性编程方法编写程序的业务逻辑 使用规则引擎可以通过降低实现复杂业务逻辑的组件的复杂性, ...
- 规则引擎.Net Core
.Net Core 环境下构建强大且易用的规则引擎 https://www.cnblogs.com/chenug/p/9160397.html 本文源码: https://github.com/jon ...
- Node.js躬行记(15)——活动规则引擎
在日常的业务开发中,会包含许多的业务规则,一般就是用if-else硬编码的方式实现,这样就会增加逻辑的维护成本,若无注释,可能都无法理解规则意图. 因为一旦规则有所改变,那么就需要修改代码再发布代码, ...
- Drools 规则引擎应用
规则引擎-drools 1 .场景 1.1需求 商城系统消费赠送积分 100元以下, 不加分 100元-500元 加100分 500元-1000元 加500分 1000元 以上 加1000分 .... ...
- Drools 规则引擎应用 看这一篇就够了
1 .场景 1.1需求 商城系统消费赠送积分 100元以下, 不加分 100元-500元 加100分 500元-1000元 加500分 1000元 以上 加1000分 ...... 1.2传统做法 1 ...
- 规则引擎ILog和CKRule的对比
IBM™ WebSphere™ ILOG是业界最有影响力的业务规则商业软件,它提供了最好的业务规则管理系统,在Java领域更是有广泛的成功案例.网上关于ILOG的技术资料非常多,大家都比较了解ILOG ...
- .Net规则引擎Biztalk,Workflow和CKRule的比较
微软的规则引擎 很多朋友会问,.Net平台有没有规则引擎?像Java就有很多的规则引擎,Drools,ILog都做得非常好,但.Net好像还没有哦.很多知道规则引擎,但不知道.Net的朋友都烦这个 ...
- SpringBoot2 整合 Drools规则引擎,实现高效的业务规则
本文源码:GitHub·点这里 || GitEE·点这里 一.Drools引擎简介 1.基础简介 Drools是一个基于java的规则引擎,开源的,可以将复杂多变的规则从硬编码中解放出来,以规则脚本的 ...
随机推荐
- gnome-terminal
在终端中打开终端: gnome-terminal 同时打开多个终端: gnome-terminal --window --window 此处有几个 --window 就会打开几个终端 最大化形式打开终 ...
- Qt 学习之路 2(60):使用 DOM 处理 XML
Qt 学习之路 2(60):使用 DOM 处理 XML 豆子 2013年8月3日 Qt 学习之路 2 9条评论 DOM 是由 W3C 提出的一种处理 XML 文档的标准接口.Qt 实现了 DO ...
- [Maven]Codehaus的Maven Repository地址
In ~/.m2/settings.xml you can update the URL to be used for specific repositories. For example: < ...
- python---day14( 内置函数二)
内置函数二一:匿名函数 lambda函数 lambda 表示匿名函数,不需要用def 来申明. 语法: 函数名=lambda 参数:返回值 ----〉 案例:f=lambda n:n*n 例子01: ...
- C++_异常4-将对象用作异常类型
通常,引发异常的函数将传递一个对象.这样做的重要优点之一就是,可以利用不同的异常类型来区分不同的函数在不同的情况下引发的异常. 对象可以携带信息,程序员可以根据这些信息来确定异常的原因. 同时,cat ...
- [BZOJ 5415] 归程
一棵KrusKal重构树,然而我数组开小了,忘记清空一个标记 洛谷传送门 BZOJ传送门 ......好像成权限题了Orz 回顾我们用KrusKal做生成树的时候,我们将边排序后连通各个连通块,那么边 ...
- Miller_Rabin素数测试【学习笔记】
引语:在数论中,对于素数的研究一直就很多,素数测试的方法也是非常多,如埃式筛法,6N±1法,或者直接暴力判(试除法).但是如果要判断比较大的数是否为素数,那么传统的试除法和筛法都不再适用.所以我们需要 ...
- P3243 [HNOI2015]菜肴制作
传送门 把时间看成数,菜肴看成位置 考虑一个位置填什么数很麻烦 考虑一个数放在什么位置 一开始我想的是,对于一个限制 $(a,b)$ ,从 $a$ 往 $b$ 连一条边,然后如果有解则所有的限制构成了 ...
- codeforces 1072D Minimum path bfs+剪枝 好题
题目传送门 题目大意: 给出一幅n*n的字符,从1,1位置走到n,n,会得到一个字符串,你有k次机会改变某一个字符(变成a),求字典序最小的路径. 题解: (先吐槽一句,cf 标签是dfs题????) ...
- 2019.3.13 Java实现分数的四则运算
Java实现分数的四则运算 自己的写法 markdown太久没写格式不会用了--将就着看 Fraction.java package com.lanou; public class Fraction ...