实现自定义规则
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.
欢迎拍砖
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.
欢迎拍砖