@yanglfyangl
2018-06-07T06:17:43.000000Z
字数 1297
阅读 523
例如如下加趣币业务,有如下规则
- 如果一个普通用户发了一个鲜花,加 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> listCurrentlyRules
executeRules(String Key);
}
Example:
Example Bean
class ExampleBean: extend IRuleService{
...
...
...
}
Example Rule files
{
"key":"userLoginRules"
"content": "
if 用户刚注册 then 充趣币(500)
if 用户今天第一次登录 then 充趣币(5)
...
"
}
Exampel
@Test
void main(){
RuleClient client = RuleClient.Open(config);
client.executeRules("userLoginRules", "userID1");
...
}