@yanglfyangl
2018-06-07T06:17:43.000000Z
字数 1297
阅读 571
例如如下加趣币业务,有如下规则
- 如果一个普通用户发了一个鲜花,加 1 趣币;
- 如果是这个圈子里的圈主发了一个鲜花,加 1.5 趣币;
- 如果不是这个圈子里的圈主,但是别的圈子的圈主发了一个鲜花,加 1.2 趣币;
这样的操作可以抽象成
基本操作规则
- 获取用户角色(UserInfo)
- 给用户加趣币(userID, conNumber)
这时候,可以写逻辑了
addFunctionOfClassMethod(获取用户角色 ... )addFunctionOfClassMethod(给用户加趣币 ... )addMacro(本圈圈主)addMacro(圈主但非本圈)addMacro(普通用户)if 本圈圈主 then 给用户加趣币(usrID, 行为类型, 1.5)if 圈主但非本圈 then 给用户加趣币(usrID, 行为类型, 1.2)if 普通用户 then 给用户加趣币(usrID, 行为类型, 1)
这样,代码容易理解,同时Review和更新更方便。
简单流程
规则库分三部分
基本操作,例如
- "读取用户信息"
- "增加趣豆"
- "增加趣币"
- "写错误日志"
- ...
"变量或判断"定义(宏定义),例如:
- "后台管理员"
- "本圈圈主"
- "。。。"
业务逻辑(名称:逻辑)
- HandleBeanCoin: 上面的逻辑
- ...
- 支持可视化规则库。
- 支持规则版本。
API:
class IRuleService:{abstrt List<T> getSpecFunctions();abstrt List<T> getSpecMaco();abstrt List<T> getRulesFiles();...}class RuleConfig:{threadNumber;....}class RuleClient:{open(RuleConfig)List<String> listCommonFunctions();List<String> listCommonMaco();List<String> listCurrentlyRulesexecuteRules(String Key);}
Example:
Example Bean
class ExampleBean: extend IRuleService{.........}
Example Rule files
{"key":"userLoginRules""content": "if 用户刚注册 then 充趣币(500)if 用户今天第一次登录 then 充趣币(5)..."}
Exampel
@Testvoid main(){RuleClient client = RuleClient.Open(config);client.executeRules("userLoginRules", "userID1");...}