记一次框架设计经验--规则引擎

前面讲数据质量监控的时候,楼下很多评论希望能把规则引擎也讲一下,规则引擎是一个既复杂但又简单的系统,复杂的地方在于它要满足多种多样的业务需求,需要知道各个事实的既定结果,然后通过既定公式获得最终需要的结果。


在开讲之前我们首先要了解几个名词:

 facts 事实,我们实现的时候,会有一个事实库。用F表示。

patterns 模板,事实的一个模型,所有事实库中的事实都必须满足模板中的一个。用P表示。

conditions 条件,规则的组成部分。也必须满足模板库中的一条模板。用C表示。我们可以这样理解factspatternsconditions之间的关系。Patterns是一个接口,conditions则是实现这个接口的类,而facts是这个类的实例。

rules 规则,由一到多个条件构成。一般用andor连接conditions。用R表示。

actions 动作,激活一条rule执行的动作。


举个贷款的例子:一个在国企工作名下有一套房的35岁已婚男士去银行贷款买车。按照正常思维,这个人工作稳定有持续的经济来源,在18周岁到56岁之间生活能够自理并且能持续还款,同时已婚代表有很大概率该客户责任心大,至少不会因为一些小挫折不还款,有担忧,就有保证,如果是我的话,肯定贷给他。


其实大家不可能根据一篇文章就会知道所有的规则引擎知识。从网上下了一张图,如下就是一个地址校验的规则,首先我们去判断是否满足一个地址的长度或者说非空,才会走入下一个规则校验行政区和经纬度是否一致:


图片 

其实理论知识大家都知道不少了,上边的几个名词就是每条规则抽象出来的元件,还有就是rete算法是规则引擎比较常用的算法,大家可以了解一下。


我接下来讲一下设计规则引擎时候注意的几个点:

1.一般来讲规则都是有四则运算或者更复杂的数学计算组成,例如:非A即B,A且B为C

所以这些东西都是很容易抽象的,开发的时候肯定要注意的。

2.大家都是程序员所以开发的时候还是尽量把做到可拓展,其实只要把架构的最小单元找对了,可拓展小菜一碟。。

写的不多,大家如果感兴趣我再接着写,实在是工作比较忙,只能找点下班时间写会




猜你喜欢

转载自blog.51cto.com/15023245/2647479
今日推荐