使用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的规则引擎,开源的,可以将复杂多变的规则从硬编码中解放出来,以规则脚本的 ...
随机推荐
- [APIO2009]抢掠计划 tarjan缩点+spfa BZOJ1179
题目描述 Siruseri 城中的道路都是单向的.不同的道路由路口连接.按照法律的规定, 在每个路口都设立了一个 Siruseri 银行的 ATM 取款机.令人奇怪的是,Siruseri 的酒吧也都设 ...
- Qt 学习之路 2(41):model/view 架构
Qt 学习之路 2(41):model/view 架构 豆子 2013年1月23日 Qt 学习之路 2 50条评论 有时,我们的系统需要显示大量数据,比如从数据库中读取数据,以自己的方式显示在自己的应 ...
- 极限编程(xp),iso国际标准化组织
极限编程(xp):eXtreme Programming 极限编程-XP 四个价值:沟通 communication.简化 similicity.反馈 feedback.勇气 courage http ...
- oracle数据库操纵语言DML
oracle数据库操纵语言:DML 添加数据: ()直接添加数据: insert into table_name(column_name1,column_name2,...) values(data1 ...
- [转] Angular 4.0 内置指令全攻略
[From] https://segmentfault.com/a/1190000010416792 简书链接 在这篇文章中,我们将分别列举每一个内置指令的用法,并提供一个例子作为演示.尽量用最少最简 ...
- Scrapy安装指南(windows)
windows开发,难免遇到很多坑,比一般开发是艰苦得多.先不吐槽windows,我们直接看这个scrapy怎么安装. 首先,要有一份文档,比如我用这个: http://scrapy-chs.read ...
- nginx 地址重写
例如, www.baidu.com 跳到 www.baidu.com/index.html #if ( $http_host ~* "^(.*)\.baidu\.com$" ...
- Win10小娜关闭或删除进程
先来说下我为什么想尽方法关闭win10小娜:我觉得功能并不适用于我,即便不启用Cortana小娜,在Win10进程中也会看到Cortana小娜启动着,耗费了内存.CPU,而且主要的我的磁盘利用率等都居 ...
- 《The Python Standard Library》——http模块阅读笔记1
官方文档:https://docs.python.org/3.5/library/http.html 偷个懒,截图如下: 即,http客户端编程一般用urllib.request库(主要用于“在这复杂 ...
- html5使用local storage存储的数据在本地是以何种形式保存的
html5使用local storage存储的数据是如何保存在本地的?(我使用的是chrome浏览器,chrom浏览器是用sqlite来保存本地数据的) Html5 的local storage 是通 ...