代码优化系列:1.多个if语句并行复杂度过高

项目组的代码经历过外包,后又从小组成立的后端人员,再然后有了前端开发人员,一直到我们这一批,有点一言难尽。一直想重构一下,奈何一直没时间。

问题:代码静态扫描,发现有如下代码需要优化:

public loginSubmit() {
    // 一些校验代码
    ...
    ...
    this.userService.postLogin(loginReqData)
      .subscribe((resData: UserServiceNs.AuthAnyResModel) => {
        this.loading = false;
        // **************************需要优化片段**************************

        if (resData.code != 0) {
          if (resData.code == 7) {
            resData.value = 'User or password error';
          }
          if (resData.code == 11) {
            resData.value = 'The user is locked';
          }
          if (resData.code == 38) {
            resData.value = 'User expired';
          }
          if (resData.code == 41) {
            resData.value = 'This account has been deleted, does not exist';
          }
          if (resData.code == 42) {
            resData.value = 'The account has been disabled';
          }
          if (resData.code == 45) {
            resData.value = 'Tenant or superior tenant administrator account has expired';
          }
          // ***********************以上片段需要优化**************************

          this.createNotification('error', resData.value);
          return;
        }

        ...

      }, (error: UserServiceNs.HttpError) => {
        // 错误处理
        ...
      });
  }

此类代码在后续开发中难以维护,代码冗长,复杂度高,影响性能。

解决办法: 

1. 可以通过switch:

  switch(val){
    case 7:
      ...
      break
    case 11:
      ...
      break
    ...
    ...
    case 42:
      ...
      break
    case 45:
      ...
      break
  }

2. 通过对象枚举key-value方式

虽然switch语句在逻辑上确实比else if语句简单,但是代码量也不算少,如果后续扩展,代码会不断累加。

代码如下:

public loginSubmit() {
    // 一些校验代码
    ...
    ...
    this.userService.postLogin(loginReqData)
      .subscribe((resData: UserServiceNs.AuthAnyResModel) => {
        this.loading = false;
          // **************************优化后代码**************************
          if (resData.code != 0) {
                // 创建对象,以键值对的方式存储
                const codeArr = {
                    7: 'User or password error',
                    11: 'The user is locked',
                    38: 'User expired',
                    41: 'This account has been deleted, does not exist',
                    42: 'The account has been disabled',
                    45: 'Tenant or superior tenant administrator account has expired'
                 };
                // 通过统一处理函数返回值赋值
                resData.value = this.handleReturnType(codeArr, resData.code);
       
          // ***********************以上片段优化后**************************

          this.createNotification('error', resData.value);
          return;
        }

        ...

      }, (error: UserServiceNs.HttpError) => {
        // 错误处理
        ...
      });
  }

  // 处理返回不同类型值中英文切换显示
  handleReturnType(codeArr, value) {
    return codeArr[value];
  }

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值