使用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的规则引擎,开源的,可以将复杂多变的规则从硬编码中解放出来,以规则脚本的 ...
随机推荐
- ScrollView-电影列表
ScrollView 的使用import React, { Component } from 'react';import { Platform, StyleSheet, Text, View, Sc ...
- 用python脚本 从xls文件中读取数据
导入 xlrd 第三方模块 import xlrd data = xlrd.open_workbook('test.xlsx') # 打开xls文件 table = data.sheets()[0] ...
- R语言学习笔记(四)
6. 数据转换 本章主要讲述apply系列函数:apply.lapply.sapply.tapply.mapply,以及姊妹函数by.split.适用于批量处理数据,而不许循环. 6.1 向量分组 用 ...
- 数据结构5.4_m元多项式的表示
三元多项式表示如下: P(x,y,z) = x10y3z2 + 2x6y3z2 + 3x5y2z2 + x4y4z + 6x3y4z + 2yz + 15 然后对式子进行变形: P(x,y,z)=(( ...
- fread 快速读入 (神奇挂!)
注意这里是将后台的所有数据都读入在计算 #include<bits/stdc++.h> using namespace std; #define ll long long namespac ...
- HDU 6321 (状压dp)
题目大意:: 为给你n个点(n<=10,nn<=10,n) 初始时没有边相连 然后有m个操作(m<=30000m<=30000) 每次可以添加一条边或删除一条边 允许有重边 要 ...
- 自动判断文本文件编码来读取文本文件内容(.net版本和java版本)
.net版本 using System; using System.IO; using System.Text; namespace G2.Common { /// <summary> / ...
- 【总结】ettercap工具之DNS劫持
在arp欺骗成功基础上开始进行dns劫持,,, 1.修改/etc/ettercap/etter.dns文件内容,如下图所示. 将所有域名解析到192.168.1.250地址上,,, 2.etterca ...
- EntityFramework 建立一对一关系
前言:本来要使用实体拆分实现一对一,但发现查询时无法单独查询,影响效率,故改用手动建立一对一关系 例: 实体类: public class TestDbContext : DbContext { pu ...
- python练习七十:图片生成
题目:使用python生成类似于下图的字母验证码图片 实现代码: from PIL import Image,ImageFont,ImageDraw,ImageFilter import random ...