`

自定义规则

 
阅读更多
实现自定义规则
a) 简单规则设计
1. 规则解析对象类[自定义类]
"expressExp"  new ExpressExp()
2. 规则解析对象类的方法[自定义类方法]
"hasCoder"  "expressExp.hasCoder(String s)"
3. 静态规则表达式
"expressExp.hasCoder(1)"
4. 动态规则表达式
expressExp.hasTag($key1,$key2)"
5. 通过反映调用自定义类[expressExp]的自定义类方法[hasCoder],并指定参数[1]/[ $key1,$key2].
b) 规则引擎目的
1. 如果此规则作为定义任务的规则
例子:
   任务1:
当数据A符合规则1
      当数据A符合规则2
当数据A符合规则3
得到结果
   任务2:
当数据A符合规则1
当数据A符合规则2
得到结果
…..
当任务有很多规则,其组合方式很复杂时,就需要使用规则引擎,如果使用程序的调用,那么
任务1 if(任务1){ 规则1(A),规则2(A),规则3(A)}
任务2 if(任务2){ 规则1(A),规则2(A)}
任务N.
如何规则2种,那么会有2^2次,4种组合方式,那么如果规则有5种,其组合方式为2^5,32种组合方式,其if/else已经能够让你吐血.
2. 如果此规则定义经常变更
例子:
   任务1:
当天气睛,使用A套装方案,散太阳.
当天气雨,  使用B套装方案,淋雨
当天气阴,  使用C套装方案,家里蹲
  
If(睛) 散太阳
If(雨) …

如果你是作业务的,你应该就清楚了,业务天天变,如果硬编码,以后够你受的,如果你能够预测到这块业务可能会变更,那么使用规则。

比如if(睛) 散太阳,打不球.
如果使用规则的话,只需要添加规则定义就够了。
c) 规则引擎基本操作符
“&&”  与
“||”   或

简单规则例子:
”expressExp.hasTag($key1,$key2)&& expressExp.hasTag($key1,$key2)”
首先按照基本操作符进行拆分
”expressExp.hasTag($key1,$key2)”  R1
“expressExp.hasTag($key1,$key2)”  R2
分别计算不同表达式的结果,最后再对他进行组合R1&&R2.

欢迎拍砖
0
3
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics