错误的代码写法
整理一下项目中不好的代码写法
以下是一些具有代表性的问题, 都是一些一看就明白的问题, 还有一些代码的坑, 慢慢填吧.
只针对代码, 不针对谁, 如果写的不对的对方, 你咬我啊
代码问题
还失败重试? 失败重试个啥? 直接返回了 老铁!!
代码1后面, 获取了 batchResult, 不应该重新赋值 code 嘛?
代码2为修改后
Intellij idea 是个好东西
修改为:
catch 里面使用 printStackTrace(), 错误日志全部输出到 catalina.out
, 你考虑过 catalina 的感受吗?
日志问题后面说
这是先斩后奏吗?
前面都调用了 list 的 size 方法, 后面再来判断 list 是否为 null?
这种代码我看见起码不下 10 处, 系统能稳定吗老铁?
idea 都知道的问题, 你不应该不知道
logger.info 输出问题:
用 log.info("{}", xxxx)
, 不要自己拼接字符串
老铁, 你可长点心吧
老铁, 我就服你
google : logger.error() 正确使用姿势
JDK7 之后的变化
JDK7 之 钻石语法
画蛇添足
value 就是 String 类型了, 写 toString() 是为了练打字吗?
强迫症可能要急死
看见黄色警告了吗? 知道怎么改吗?
你就告诉我需要多宽的显示器?
老铁, 公司没给配这么宽的显示器啊...啊, 27寸的也看不过来啊
超过120列宽必须需要换行
超过5个参数, 推荐使用实体类
你还是去写 python 吧
知道什么叫 util 吗?
Intellij IDEA 都知道会有空指针, 你还这么写?
不能直接 return 吗? 练打字吗?
面试题之 String, StringBuilder, StringBuffer
JDK 5 以后 JVM 对字符串循环拼接的处理方式
老铁, 类注释, 方法注释呢
类注释呢?
方法注释虽然有, 但是不标准啊, 老铁
没看见那么多黄色警告吗?
代码规范我们后面说
每个模块都有一个 StringUtil, 还有叫 StringUtils 的
老铁, 写之前先看看能不能复用啊, 或者复制之前, 看是不是已经有了啊.
你以为把 DDL 语句拷贝过来就不用写字段注释了吗?
老铁, 你这样骚操作我很为难啊
在类上按 F1 看不到类注释啊
这样改啊
F1 直接看类注释啊, 不用跳转了啊
F1 直接看字段注释啊, 不用再去查 DDL 了啊, 不会在蒙圈了啊
老铁, 不是中文看不懂啊
额, 这个要怪 idea 了, 居然没有默认转换
老铁, 把 transpartent 打开, 你就认识中文了
老铁, 看见黄色警告了? 如果是自己解析配置, 没有处理空白符的话, 又出 bug 了啊..啊.
老铁, 代码用 UTF-8 啊, 不然要乱码啊
全都要 UTF-8 啊, 要跟国际接轨啊
老铁, 0是啥, 1是啥, 2又是啥啊? 脑壳都大了啊...
定义个常量啊, 常量名用拼音也比没有好啊, 老铁
论 MVC 架构的职责
dao 就是对表的操作, 一个 dao 对应一张表; service 组合多个 dao进行业务处理; controller 做参数检查, 结果封装, 跳转页面;
你咋不把所有的 sql 都写在一个 xml 里面呢?
这个也要注入? 也能注入?
😅😂🤣
多余的 finally
redis-proxy 已经对 jedis 资源的安全释放做了处理, 不用自己在写这些冗余的代码
catch 里面不要做流程控制, OK?
改为
log 输出错误
日志的正确使用姿势, 你值得了解一下
推荐去搜一下 log 的正确输出方式.
log.error("访问 redis 异常", e);
做人能不能真诚一点, 写代码能不能简单一点
改为:
IavpResponse iavpResponse = HttpUtil.sendPost(inputParams, "gatherkey", Integer.parseInt(timeOut));
if(iavpResponse.getStatusCode() == HttpStatus.SC_OK){
return XmlConverUtil.readGatherKeyXmlOut(iavpResponse.getContent());
}
2
3
4
XmlConverUtil.java
public static List<GatherKeyInfo> readGatherKeyXmlOut(String xml) {
if(StringUtils.isBlank(xml)){
return null;
}
...
}
2
3
4
5
6
isNotEmpty 和 isNotBlank 的区别知道吗?
改为:
3行代码搞定的事, 非要写几十行, 练打字吗?
原始代码
用于检查是否是会员
public boolean judgeMiguSuperVIP(String caller) {
boolean VIPReturn = false;
//isMiguGameMothMember表示游戏会员状态, 1表示是包月会员, 0表示不是包月会员
String isMiguGameMothMember = "0";
try {
GameAccount gameAccount = miguGameProvider.queryUserInfo(caller);
if (gameAccount != null) {
isMiguGameMothMember = gameAccount.getMiguSupperMember();
} else {
isMiguGameMothMember = "0";
}
if ("1".equals(isMiguGameMothMember)) {
//是咪咕超级会员
VIPReturn = true;
return VIPReturn;
} else {
//不是咪咕超级会员
VIPReturn = false;
return VIPReturn;
}
} catch (Exception e) {
//查询游戏账号状态异常
VIPReturn = false;
return VIPReturn;
}
}
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
重构1
删除 boolean VIPReturn
public boolean judgeMiguSuperVIP(String caller, String type) {
// isMiguGameMothMember表示游戏会员状态, 1表示是包月会员, 0表示不是包月会员
String isMiguGameMothMember = "0";
try {
GameAccount gameAccount = miguGameProvider.queryUserInfo(caller, type);
if (gameAccount != null) {
isMiguGameMothMember = gameAccount.getMiguSupperMember();
} else {
isMiguGameMothMember = "0";
}
return "1".equals(isMiguGameMothMember);
} catch (Exception e) {
return false;
}
}
2
3
4
5
6
7
8
9
10
11
12
13
14
15
重构2
删除 isMiguGameMothMember
public boolean judgeMiguSuperVIP(String caller, String type) {
// isMiguGameMothMember表示游戏会员状态, 1表示是包月会员, 0表示不是包月会员
try {
GameAccount gameAccount = miguGameProvider.queryUserInfo(caller, type);
return gameAccount != null && "1".equals(gameAccount.getMiguSupperMember());
} catch (Exception e) {
return false;
}
}
2
3
4
5
6
7
8
9
重构3
queryUserInfo 已经处理的下层抛出的异常, 这里不需要再处理
public boolean judgeMiguSuperVIP(String caller, String type) {
// isMiguGameMothMember表示游戏会员状态, 1表示是包月会员, 0表示不是包月会员
GameAccount gameAccount = miguGameProvider.queryUserInfo(caller, type);
return gameAccount != null && "1".equals(gameAccount.getMiguSupperMember());
}
2
3
4
5
日志问题
老铁, 日志输出到文件要用 UTF-8 啊
不然乱码看不懂啊
老铁, 日志输出能不能统一格式啊?
老铁, 日志输出能不能分级别啊?
老铁, 日志框架能不能统一使用一个啊?
一会 log4j, 一会 log4j2的 做人喜新厌旧可以(log4j2更新, 效率更好) 但也要专一, 说好放学别走就不能走, 要跑... 说好用 log4j2 + slf4j, 就不要用 System.out.println() OK?
Maven 问题
老铁, 一个模块这么多版本啊, 怎么管理啊
maven 用来管理项目中的依赖关系的, 这个没使用 maven 有什么区别?