这段代码已经优化一版了,但是感觉还能优化?可以提个思路吗?

这段代码已经优化一版了,但是感觉还能优化?可以帮忙提个思路吗?
优化之后的代码如下:

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);
  }

img


这一大段放到另一个方法去,让当前方法的整体逻辑更加清晰明了一些

contentBuffer的定义放到下面来,离初始化更近的位置

代码永远都能优化
按照某位大神的说法,一个函数里代码超过5行说明你封装的有问题
优化总要有个目的吧,你是要往哪个方向优化
是想让代码看起来更简洁,还是让它执行效率更高,还是更有利于扩展,你要想好了才开始优化
因为很多目的互相是矛盾的

img


1、if嵌套太深了,你可以使用lambda表达式优化一下,或者你让不满足条件的数据,提前return;
2、不同的版本,调用同一个接口,你这块可以用策略模式 + 抽象模版模式,后面又其他版本,只需要重写一个接口即可;
3、这种最好别用map,后期其它人不好维护,而且下游接口改了,你得全局改字段

img