编码优化性定义分享

2023-11-12  本文已影响0人  _Rondo

一、代码的可读性

1.1、命名

命名随处可见,给变量、函数、参数、类和封包命名。应遵循规范文档的命名规范,并且一旦发现有更好的名称,就换掉旧的。这么做,你和读你代码的人都会更开心。

1.2、格式
//空块状结构
void do(){}

if() return ;

//多块状结构
if(expression){

}else if(otherExpression){ 

}else{

}
1.3、异常
public void test(){
        try{
                do smoething
                do smoething
                do smoething
        }catch(Exception e){

        }
}
public void test(){
        try{
                do smoething
        }catch(Exception e){

        }
        try{
                do smoething
        }catch(Exception e){

        }
        try{
                do smoething
        }catch(Exception e){

        }
}
1.4、常量/魔术值
public boolean hasAdminRole(List<Role> roles){
    for(Role role : roles){
        if(user.getId == 9527){
            return true;
        }
    }
    return false;
}
//key角色对应的id
private static final Integer KEY_ROLE_ID = 9527;

public boolean hasKeyRole(List<Role> roles){
    for(Role role : roles){
        if(user.getId == KEY_ROLE_ID){
            return true;
        }
    }
    return false;
}
1.5、函数
public LoginUser getUserInfo(){
    //获取用户 token
    ServletAttributs requestAttributes = RequestContextHolder.getRequestAttributes();
    HttpServletRequest request = requestAttributes.getRquest();
    String token = request.getHeader("access_token");
    if(StringUtils.isEmpty(token)){
        throw new EmptyLoginTokenException("用户登录token获取错误");
    }
    //根据token 获取用户信息
    SysUser user = (SysUser)redisUtil.get(token);
    //转换loginUser
    LoginUser loginUser = new LoginUser();
    loginUser.setId(user.getId());
    loginUser.setAccount(user.getAccout());
    loginUser.setName(user.getName());
    ...
    //补充角色信息
    List<SysRole> roles = new ArrayList<>();
    roles = roleService.getRolesByUserId(loginUser.getId());
    if(CollectionUtils.isNotEmpty(roles)){
            Set<SysRole> roleSet = new HashSet(roles);
        roles.setRoles(roleSet);
         //补充权限信息
        List<SysPermission> permissions = new ArrayList<>();
        permissions = permissionService.getPermissionsByRoles(roles);
        if(CollectionUtils.isNotEmpty(permissions)){
            Set<SysRSysPermissionole> permissionSet = new HashSet(permissions);
            roles.setPermissions(permissionSet);
            ...
        }
    }
         return loginUser;
}
public LoginUser getUserInfo(){
    //获取用户 token
    String token = getToken();
    //根据token 获取用户信息
    SysUser user = (SysUser)redisUtil.get(token);
    if(ObjectUtil.isNEmpty(user)){
         return null;
    }
    //转换loginUser
    LoginUser loginUser = convertLoginUser(user);
    //补充角色信息
    supplyLoginUser(loginUser);
         return loginUser;
}

private String getToken(){
    ServletAttributs requestAttributes = RequestContextHolder.getRequestAttributes();
    HttpServletRequest request = requestAttributes.getRquest();
    String token = request.getHeader("access_token");
    if(StringUtils.isEmpty(token)){
        throw new EmptyLoginTokenException("用户登录token获取错误");
    }
    return token;
}

private LoginUser convertLoginUser(SysUser user){
    LoginUser loginUser = new LoginUser();
    loginUser.setId(user.getId());
    loginUser.setAccount(user.getAccout());
    loginUser.setName(user.getName());
    ...
    return loginUser;    
}

private void supplyLoginUser(LoginUser loginUser){
    List<SysRole> roles = new ArrayList<>();
    roles = roleService.getRolesByUserId(loginUser.getId());
    if(CollectionUtils.isNotEmpty(roles)){
            Set<SysRole> roleSet = new HashSet(roles);
        roles.setRoles(roleSet);
         //补充权限信息
        List<SysPermission> permissions = new ArrayList<>();
        permissions = permissionService.getPermissionsByRoles(roles);
        if(CollectionUtils.isNotEmpty(permissions)){
            Set<SysRSysPermissionole> permissionSet = new HashSet(permissions);
            roles.setPermissions(permissionSet);
            ...
        }
    }
}
1.6、嵌套
void render(List<User> users){
    if(CollectinUtils.isNotEmpty(users)){
       for(User user : users){
           if(CollectinUtils.isNotEmpty(user.getRoles())){
              for(Role role : user.getRoles()){
                  do something
              } 
           }
       }
    }
}
void render(List<User> users){
    if(CollectinUtils.isEmpty(users)){
        return;
    }
    for(User user : users){
      if(CollectinUtils.isEmpty(user.getRoles())){
         continue;
       }
      for(Role role : user.getRoles()){
         do something         
      }   
    }
}
1.7、条件
List goodNames = new ArrayList<>();
if(bool){
    for (String name: names) {
      if (name.contains("bad")) {
        continue;
      }
      goodNames.add(name);
      ...
    } 
}
List goodNames = new ArrayList<>();
for (String name: names) {
  if (!name.contains("bad")) {
    goodNames.add(name);
    ...
  }
}  
if(menus.contain(MenuEnums.HOME_PAGE)
          && menus.contain(MenuEnums.ERROR_PAGE)
          && menus.contain(MenuEnums.LOGIN_PAGE)){

}
Subject sub = new Subject();
sub.setDataScope(UserContext.hasAdminRole()?"all":user.getDataScope());
1.8、边界

项目管理中,项目由进度、成本、质量和边界构成,边界是指研发过程中应完成需求对应的功能,避免不必要的过度编码,由此引发的返工问题也会回过头来影响进度、成本与代码质量。

1.9、注释

二、代码的可维护性

三、代码的可变更性

四、技术评审

技术评审包含编码前的方案评审和编码后的代码review,是代码质量管理方式的一种,以下列举代码评审阶段排排查的典型案例:

上一篇下一篇

猜你喜欢

热点阅读