不好的代码要引以为戒,才能写出更好的代码

2022-11-10  本文已影响0人  余很多之很多code

不好的代码要引以为戒,才能写出更好的代码

吃掉异常

try {
    //...
}
catch (Throwable t) {
    return;
}

catch的地方直接吃掉异常,这样导致排除问题变困难。

变量名无意义,神奇魔法数

public static final String ZERO = "0";//Constants.java
wrapper.lambda().eq(UserEntity::getIsDelete, Constants.ZERO);

定义的变量名只是0的英文,根本无法理解表达的是已经删除还是未删除状态

循环里依次查询数据库

for(Test test:tests) {
    test.setName(userService.getNameById(test.getUserId()));
}

应该汇总userId,一次性查询tests列表里对应的,而不是循环不断查询

System.out.println()打印

System.out.println("users:"+users);

生产上应该用log日志去打印,而不是System.out.println,
System.out.println代码跟踪进去,会有synchronized 同步锁,对性能影响很大。
printStackTrace也是。

参数传递userId

//接口请求,传递userId,直接用前端给的userId查询数据
//user/getUserById?userId=11

存在安全风险,应该从当前用户session或者token中得到userId(经验的原因,新手老是会犯)

大量的ifelse

if ("1".equals(type)) {
    ...
} else if ("2".equals(type)) {
    ...
} else if ("3".equals(type)) {
    ....
} else if ("4".equals(type)) {
    ....
}

通过map优化,更复杂考虑采用责任链模式。

controller调用mapper

@RestController("user")
public class UserController {
 
    Autowired
    private UserMapper userMapper;
 
    @RequestMapping("/getUser")
    public String getUser() {
        Long userId = ...;
        return userDao.getUserById(userId);
    }
}

controller直接调用mapper,而不是service,层级混乱

未在finally中close

try {
    //...
    x.close();
}
catch (Throwable t) {
    return;
}

很多api涉及到资源释放,都会提供close方法,
但是close()方法应该写在finally中确保被调用。

log日志打印用占位符而不是用字符串拼接

log.info("users:"+users);

正确应该是log.info("users:{}",users);

synchronized范围太大

public void deal() {
    synchronized (obj) {
        // 查询list当数据判断
        // 处理业务
    }
}

synchronized应该锁粒度尽量小,本身查询list没有影响的情况下,应该在synchronized前面执行,而不是方法里面,影响了整体性能。

上一篇 下一篇

猜你喜欢

热点阅读