这段代码已经优化一版了,但是感觉还能优化?可以帮忙提个思路吗?
优化之后的代码如下:
protected void internalConsume(Command cmd) {
//进入客户端时更新超时消息
updateTimeoutMsgWhenEnterAdapter(cmd);
Buffer contentBuffer = null;
NCBuilder nb = NCBuilder.builder().cmd(cmd).build();
try {
//1.初始化参数
initParameters(nb);
//如果版本是2005之后走这个逻辑
if(NcVersion.isNCC2005AfterVersion(nb.getVersion())){
nclog.debug("Call " + nb.getVersion() +"u begin, senderId is " + cmd.getSenderID());
Map headerMap = initHeaderMap(nb);
//2.获取token
//获取参数的接口,不需要获取token。
if (judgeRequestAccount(nb.getNcAcctContext())) {
handleParametersRequest(nb, headerMap, RETRYNUM);
} else {
Boolean accountCodeIsNull = checkAccountCode(nb);
//获取token
if (!accountCodeIsNull) {
getToken(nb, tokenRes -> {
if (tokenRes.succeeded()) {
//3.获取token成功拼到header里,请求业务接口
Token token = tokenRes.result();
headerMap.put("access_token", token.getAccess_token());
headerMap.put("security_key", token.getSecurity_key());
//请求业务接口 RETRYNUM 重试次数默认为3
handleNCCBusinessRequest(nb, headerMap, RETRYNUM);
} else {
//处理失败结果
handleResult(nb.getCmd(), nb.isAsyn(), null, StatusCode.GATEWAY_EXECUTE_FAIL,
tokenRes.cause());
}
});
}
}
return;
}
if (!nb.isGet()) {
Objects.requireNonNull(nb.getNcAcctContext(), "ncAcctContext can't be null");
byte[] datas = nb.getNcAcctContext().toString().getBytes(StandardCharsets.UTF_8);
contentBuffer = Buffer.buffer(datas);
}
} catch (Exception e) {
//解析参数异常
cmd.fail(vertx, StatusCode.PARAMETER_ERROR.getValue(), e.getMessage());
log(cmd, null, StatusCode.PARAMETER_ERROR.getValue(), e);
return;
}
//打印适配器收到请求的日志
printAdapterRequestLog(nb);
//2005之前的处理逻辑
handleRequest(nb, contentBuffer, RETRYNUM);
}
contentBuffer的定义放到下面来,离初始化更近的位置
代码永远都能优化
按照某位大神的说法,一个函数里代码超过5行说明你封装的有问题
优化总要有个目的吧,你是要往哪个方向优化
是想让代码看起来更简洁,还是让它执行效率更高,还是更有利于扩展,你要想好了才开始优化
因为很多目的互相是矛盾的