规则引擎设计概况

在一个系统中业务规则占据了相当大的比例,而且是变动最为频繁的,我们总是希望把容易变动的和不容易变动的分离开来,这样就不至于因为修改易变的部分影响不需变的部分,从而简化系统修改的复杂性,也提高系统的灵活性。

在一个系统中我们把组成部分拆分为数据,逻辑,界面等几个部分,其中数据又可以进一步拆分为水平和垂直部分,对于逻辑绝大部分是”如果-那么”这种形式,对于界面部分可拆分为页面,控件(文本框,下拉框,日期,文件,图片,单选框,多选框等)和展示权限(可看,可编辑)。

业务逻辑从本质上来讲就是一种规则的集合,数据和展示都是规则实施的对象,规则甚至也可以对规则起作用,这样就成了规则的规则。因此如果要设计规则引擎那么这个规则必须要可以引用和操作数据(水平,垂直),页面,控件,规则等组成部分。

上面也提到规则大部分是“如果-那么”这种形式,这种形式从本质上讲可以看做“条件-执行”,这样所有的规则都拆分为规则条件和规则执行体两部分。规则有作用域,顺序,黑名单,白名单,例外等。

对于规则的形式我想到了几个简单的例子:

  1. 当客户生日时产品折扣为0.8

rule "1":

if

[Customer].[Birthday]=[Today]

then

[Product].[Rate]=0.8

else

[Product].[Rate]=1

end

  1. 在2013-11-01到2013-11-10期间产品货号73022101折扣0.8

rule "2":

if

[Today]>=[2013-11-01] and [Today]<=[2013-11-10] and [Product].[sCode]=73022101

then

[Product].[Rate]=0.8

else

[Product].[Rate]=1

  1. 操作员级别为3的执行规则1,其他的执行规则2

rule "3":

If

[Operator].[level]=3

Then

[Rule “1”].Active=true

[Rule “2”].Active=false

Else

[Rule “1”].Active=false

[Rule “2”].Active=true

End

  1. 员工类型为采购时入库价可见,其他用户不可见

rule "4":

If

[Operator].[type]=”采购”

Then

[Product].[Price_in]. Visible=true

Else

[Product].[Price_in]. Visible=false

End

以上规则是在配置文件中的,可方便修改而不用修改程序和进行编译,也可以缓存起来以提高性能。

规则的表现形式可以是xml,脚本,逻辑语言,图像,如果能实现一个规则设计器可以大大方便规则的制定,降低规则学习的门槛。

因为要保证规则的全局性,那么对所有的数据查询,修改都要经过这个规则校验,因此数据操作需要一个集中的入口或者出口,所有对数据的操作都要有个用户id,规则引擎根据id和规则库来校验操作的合法性。

因为要保证界面权限和模型权限的一致性,因此要开发一套可以根据权限来自动展现的控件库。

引入规则引擎对开发模式影响也是很大的,由于业务规则从系统中分离出来,数据的基本操作都可以变成简单的增删改,有利于程序自动统一处理。开发的重点变成了开发规则执行的规则,简单的说就是制定规则的规则。系统初始化后只有一个设计器,通过设计器建立行业模型,再通过设计器对模型进行规则限制,这些工作将转移到实施部门进行,不需要开发部门进行干预。由于建立一套行业规则的工作量是很大的,因此可以预置几套行业规则模板,同一套系统在不同的规则下来适应不同的行业业务。

改造后的系统最终变成 “原型系统+规则=行业软件”,当然此想法很初步和不成熟,建立一套这样的系统难度和初期工作量也很大,但是一旦建立起来后系统灵活性大大提高,后期随业务变更变的容易,变更成本更低,更具市场竞争力。

时间: 2024-10-16 03:35:07

规则引擎设计概况的相关文章

规则引擎选型及简单应用

规则引擎实现了将业务决策从应用程序代码中分离出来,并使用预定义的语义模块编写业务决策.规则引擎具体执行可以分为接受数据输入,解释业务规则,根据业务规则做出业务决策几个过程,使用规则引擎可以把复杂.冗余的业务规则同整个支撑系统分离开,做到架构的可复用移植. 规则引擎的选型应用 相对于业务系统,规则引擎可以认为是一个独立于业务系统的模块,负责一些规则的计算等.一般来说,规则引擎主要应用在下面的场景中: 风控模型配置,风控是规则引擎 用户积分等配置,如日常操作引起积分变化等 简单的离线计算,各类数据量

.Net Core 环境下构建强大且易用的规则引擎

本文源码: https://github.com/jonechenug/ZHS.Nrules.Sample 1. 引言 1.1 为什么需要规则引擎 在业务的早期时代,也许使用硬编码或者逻辑判断就可以满足要求.但随着业务的发展,越来越多的问题会暴露出来: 逻辑复杂度带来的编码挑战,需求变更时改变逻辑可能会引起灾难 重复性的需求必须可重用,否则必须重复性编码 运行期间无法即时修改规则,但重新部署可能会带来其他问题 上线前的测试变得繁琐且不可控,必须花大量的人力和时间去测试 这些困境在『 小明历险记:

规则引擎.Net Core

.Net Core 环境下构建强大且易用的规则引擎 https://www.cnblogs.com/chenug/p/9160397.html 本文源码: https://github.com/jonechenug/ZHS.Nrules.Sample 引言 1.1 为什么需要规则引擎 在业务的早期时代,也许使用硬编码或者逻辑判断就可以满足要求.但随着业务的发展,越来越多的问题会暴露出来: 逻辑复杂度带来的编码挑战,需求变更时改变逻辑可能会引起灾难 重复性的需求必须可重用,否则必须重复性编码 运行

规则引擎入门

什么是规则引擎? 规则引擎由推理引擎发展而来,是一种嵌入在应用程序中的组件,实现了将业务决策从应用程序代码中分离出来,并使用预定义的语义模块编写业务决策.接受数据输入,解释业务规则,并根据业务规则做出业务决策. 参考: http://baike.baidu.com/link?url=BfAR-sxz1ryvOZ4uSVCqn9Csy51U5qCUaIomAQBogPE7FOxbbDB-2iXWR6N8FReIkoNNdc-Hk4y0sxKWpknWd_ 规则引擎和工作流引擎有什么区别? 工作流引

SNF快速开发平台--规则引擎介绍和使用文档

设计目标: a) 规则引擎语法能够满足分单,计费,WMS策略的配置要求.语法是一致和统一的 b) 能够在不修改规则引擎模块的情况下,加入任意一个新的规则:实现上述需求之外的规则配置需求 c) 运算速度快 d) 有良好的展现效果,能够在售前阶段帮助销售 e) 提供良好的调试和诊断手段,便于配置规则 可以把以前固定写的业务逻辑,特别不确定的那种和变化比较多的写到规则中去.这样在实施时不同客户有各种各样的需求,可以按需配置,并不能修改程序代码,这样就更灵活. 并且我们实现的日志跟踪调试,运算符.条件语

【java规则引擎】之规则引擎解释

转载:http://www.open-open.com/lib/view/open1417528754230.html 现实生活中,规则无处不在.法律.法规和各种制度均是:对于企业级应用来说,在IT技术领域,很多地方也应用了规则,比如路由表,防火墙策略,乃至角色权限控制(RBAC),或者Web框架中的URL匹配.不管是那种规则,都规定了一组确定的条件和此条件所产生的结果. 举一个例子: IF 汽车是红色车是运动型的驾驶员是男性驾驶员在16-25岁之间THEN 保险费用增加20% 从这个例子可以看

工作流引擎设计第一版

很久没写点东西了,现在有点时间来分享下工作流引擎设计的一点体会.希望能帮助各位园友. 前段时间接手一OA系统项目,经过一段时间的需求调研,总共十多个功能模块,但系统主要功能是应付一堆堆审批流程,各流程千差万别,而且流程变动也大,这无疑是需要设计一个工作流引擎才能解决.这个引擎主要做到流程可配置,可视化编辑,可视化的流程图展示,且需要保留审批处理的历史快照...... 经过一段时间的资料查阅(感谢园子的大虾们),并且经合自身的经历(曾经用过,但未曾开发过工作流引擎),终于想出了一套方案: 以下是相

《写自己的框架6》:自定义规则引擎,适应不断变化的业务场景

规则引擎适于频繁变动做生意的场景规则.我们在应用过程中的业务,还经常要处理大量的业务规则,当然,此外,我们希望有一个规则引擎,支持,这仅仅是更好. 对一些经常使用的商业规则引擎做一下了解,感觉很不错.可是太贵了.看一些开源的引擎吧.也不错,可是感觉相对于我们自己这么简单的需求,太复杂了. 于是就想着自己做个,试试看能不能攻克了自己的这些简单的业务规则频繁变化的业务场景.嗯嗯.脑子里大概过了一下电影,感觉路是通的.主要有例如以下业务需求: 业务规则运行器须要支持多种,也应该支持业务人员自行扩展.原

jboss规则引擎KIE Drools 6.3.0-高级讲授篇

在生产环境怎么用BRMS 回溯BRMS开发教程中的那张"业务变现加速器"架构图,考虑下面的问题 业务开发人员开发规则 IT人员提供FACT 关键在于"全动态" SQL语句改了怎么办?不重启 DAO层改了怎么办?不重启 Mybatis的配置文件改了怎么办?不重启 按照上次的<jboss规则引擎KIE Drools 6.3.0 Final 教程>,一起来看一个实际的场景 如何熊掌与鱼兼得? 做到以下几点是否就可以"全得"? 规则更改不重启