记一次框架设计经验--规则引擎
作者:互联网
前面讲数据质量监控的时候,楼下很多评论希望能把规则引擎也讲一下,规则引擎是一个既复杂但又简单的系统,复杂的地方在于它要满足多种多样的业务需求,需要知道各个事实的既定结果,然后通过既定公式获得最终需要的结果。
在开讲之前我们首先要了解几个名词:
facts 事实,我们实现的时候,会有一个事实库。用F表示。
patterns 模板,事实的一个模型,所有事实库中的事实都必须满足模板中的一个。用P表示。
conditions 条件,规则的组成部分。也必须满足模板库中的一条模板。用C表示。我们可以这样理解facts、patterns、conditions之间的关系。Patterns是一个接口,conditions则是实现这个接口的类,而facts是这个类的实例。
rules 规则,由一到多个条件构成。一般用and或or连接conditions。用R表示。
actions 动作,激活一条rule执行的动作。
举个贷款的例子:一个在国企工作名下有一套房的35岁已婚男士去银行贷款买车。按照正常思维,这个人工作稳定有持续的经济来源,在18周岁到56岁之间生活能够自理并且能持续还款,同时已婚代表有很大概率该客户责任心大,至少不会因为一些小挫折不还款,有担忧,就有保证,如果是我的话,肯定贷给他。
其实大家不可能根据一篇文章就会知道所有的规则引擎知识。从网上下了一张图,如下就是一个地址校验的规则,首先我们去判断是否满足一个地址的长度或者说非空,才会走入下一个规则校验行政区和经纬度是否一致:
其实理论知识大家都知道不少了,上边的几个名词就是每条规则抽象出来的元件,还有就是rete算法是规则引擎比较常用的算法,大家可以了解一下。
我接下来讲一下设计规则引擎时候注意的几个点:
1.一般来讲规则都是有四则运算或者更复杂的数学计算组成,例如:非A即B,A且B为C
所以这些东西都是很容易抽象的,开发的时候肯定要注意的。
2.大家都是程序员所以开发的时候还是尽量把做到可拓展,其实只要把架构的最小单元找对了,可拓展小菜一碟。。
写的不多,大家如果感兴趣我再接着写,实在是工作比较忙,只能找点下班时间写会
标签:框架,--,引擎,规则,facts,conditions,事实,模板 来源: https://blog.51cto.com/15023245/2647479