用户工具

站点工具


start

CKRule是一个业务规则管理和复合事件处理的综合性引擎,可以将企业管理策略的定义,部署,管理和维护工作从核心代码中分离。 企业将深入的业务决策整合到程序,并把市场变化因素以业务规则的形式进行更新。而CKRule可大大降低程序维护的成本,促进业务程序实现更多准确和有效的商务决策。

联系我们:


1. 什么时候使用

如果您的企业遇到如下的情况,那么你适合使用规则管理:

  1. 经常变,业务系统需要直接响应变化,快速实现。常见的情况有促销系统,企业根据市场形势,经常变化促销的策略,业务系统就要快速响应。
  2. 多样化,业务系统需要适应企业的商务模型和提供的产品/服务。常见的情况有工资系统,企业会根据自身的需要,不断调整自己的内部管理模式,以适应公司的产品和服务。

2. 为什么选择CKRule

四大特点:

  1. 允许决策逻辑独立于核心程序代码。
  2. 允许技术开发员和业务专家共同定义和管理决策逻辑。
  3. 能够在程序运行时,允许程序执行决策逻辑管理,提供规则编辑器和运行引擎。
  4. 使用纯.Net CSharp开发,提供丰富API并允许使用所有.Net API,调用.Net类,方法,实现接口。

2.1 最小耦合、最简调用

引入CKRule不会导致业务系统的架构有任何的变化,业务系统可以直接引用CKRule的dll,传递业务实体对象。 这一对象被称为Business Object Model或Business Entity,任何变化内容都在CKRule内部进行了,整个调用过程只需要一句指令,引用两个DLL。 CKRule规则的改变完全不影响业务程序。 而在CKRule内部可以调用数据库,调用决策表,决策树,客户规则池,口语式编辑器。

2.2 非商业使用免费

任何机构或个人如果出于非商业用途,可以免费使用CKRule。 哪些人可以使用软件的免费授权?

  • 个人使用软件用于个人的用途(如爱好,娱乐,教育目的)
  • 学生,教员,研究员,管理员,维护员和大学员工的演示。
  • 大学或其他教育机构,非营利性组织。

2.3 纯CSharp编写

CKRule使用纯CSharp编写,任何有CSharp编程基础的技术人员都可以非常简便地使用该工具。 除.Net4.0 Framework外,无需安装任何客户端或服务器程序,如Biztalk,Oracle Client等等。 技术员可以使用最简单的IF/THEN语句维护规则。

2.4 决策表

使用CKRule决策表,你可以使用表格的形式,非常直观地创建大量的规则。 这些规则类似一个列表形式,如Excel编写的一个列表,即使不熟悉计算机技术的业务专家也非常方便设置。 而作为CKRule作为中间件可以从数据库读取决策表并加载,实现了业务系统与规则引擎的完美隔离。

2.5 决策树

决策树表现形式相对简单、形象和生活,也常常用于工作中,但因为大部分的业务系统都基于关系型数据库,保存树型数据非常不方便, 决策树上面的结点的运算也相当的困难。 CKRule解决了这个问题,可以比较简便地实现。

2.6 动态域(规则池)

允许终端用户输入用户定义的表达式,用最简单有效的方法来表达业务规则。 例如有如下的规则:

买IBM Thinkpad430,有9拆优惠。

那么,在业务系统中可以这样输入:

IsBrand(“IBM”),Discount(0.1,”ThinkPad430”)

这个输入的动作是在业务系统中实现的。在客户规则池功能中,CKRule提供了各种各样的接口或控件,供业务系统使用,但CKRule对用户是透明的,用户始终是在使用业务系统中。客户规则池生成的规则会保存在数据库中,调用CKRule时才会加载。

2.7 口语式编辑器

口语式编辑器可以在CKRule内部及客户规则池中被调用,正如其名,其语法与口语表达基本相同。 与标准编辑器相比,口语式编辑器有大量的提示,这使规则编写变得非常容易,会使用Word就会使用口语式编辑器,无需任何技术基础,一学即会。 口语式编辑器允许客户程序直接调用,这大大提供了业务系统规则编写的友好性。

3. 体系结构

3.1. 架构

CKRule就一个规则引擎,C#编写,可编译,是一个中间件的角色,目标是为了减少底层代码的变动。如此可知,对CKRule的使用,是集中在逻辑处理,使用CKRule的一般都是处理复杂多变的业务,即业务系统与中间件的关系。而如果业务系统是三层结构的,那么就是业务逻辑层调用 CKRule的。CKRule可以借助CKRemote的远程能力独立为一个Remoting或WCF服务器,而业务系统的应用逻辑层使用Remoting或WCF调用这个服务。 系统调用示意图如下:

3.2. 调用

应用服务层对CKRule的调用集中在RuleFacade接口,需要传入原业务系统定义的对象(下称BusinessEntity)和规则包的名称。CKRule不会直接引用BusinessEntity,为了独立与业务逻辑,CKRule有对象定义,可以定义传入传出属性。 整个对象库就是用来定义与BusinessEntity对应属性和类。通过下表,可以更清晰两者的关系。

项目 BusinessEntity CK对象库
属性 可定义多个属性,有基础数据类型,有自定义类型,泛型等。 在传入传入界面中定义多个属性,在自定义类型界面中定义自定义类型,可以设置泛型。
自定义类型 任意定义 在自定义类型界面中定义。
映射 在传入传出界面中设置不同的字段映射到BusinessEntity对象的属性。

RuleFacade会将BusinessEntity转化为CKRule的内部对象。然后在整个规则引擎中都使用对象库设置的内容,不再使用BusinessEntity。直到主规则已经执行完毕,才会再转化为BusinessEntity对象,返回给应用逻辑层。

一般而言,不可以把CKRule当成一个代码编译器,虽然这个工具有这个能力,但要与Visual Studio等IDE对比,那是自取其辱了。 作为规则中间件,CKRule最大的作用是快速改变规则或公式,同时有一个异常强大的功能是允许业务系统开发商快速开发出规则池,以便最终给终端用户自行编写规则。

start.txt · 最后更改: 2016/08/13 17:06 由 ckrule