错误的代码写法


7/9/2018 Other

整理一下项目中不好的代码写法

12530系统架构优化

以下是一些具有代表性的问题, 都是一些一看就明白的问题, 还有一些代码的坑, 慢慢填吧.

只针对代码, 不针对谁, 如果写的不对的对方, 你咬我啊

代码问题

还失败重试? 失败重试个啥? 直接返回了 老铁!!

代码1后面, 获取了 batchResult, 不应该重新赋值 code 嘛?

代码2为修改后

-w797

Intellij idea 是个好东西

-w857

-w730

修改为:

-w846

catch 里面使用 printStackTrace(), 错误日志全部输出到 catalina.out, 你考虑过 catalina 的感受吗?

日志问题后面说

这是先斩后奏吗?

前面都调用了 list 的 size 方法, 后面再来判断 list 是否为 null?

这种代码我看见起码不下 10 处, 系统能稳定吗老铁?

-w980

idea 都知道的问题, 你不应该不知道

-w318

logger.info 输出问题:

log.info("{}", xxxx), 不要自己拼接字符串

老铁, 你可长点心吧

-w446

老铁, 我就服你

-w832

google : logger.error() 正确使用姿势

-w832

JDK7 之后的变化

JDK7 之 钻石语法

-w493

-w381

画蛇添足

value 就是 String 类型了, 写 toString() 是为了练打字吗?

-w990

强迫症可能要急死

看见黄色警告了吗? 知道怎么改吗?

-w617

-w619

你就告诉我需要多宽的显示器?

老铁, 公司没给配这么宽的显示器啊...啊, 27寸的也看不过来啊

超过120列宽必须需要换行

-w1810

-w657

超过5个参数, 推荐使用实体类

你还是去写 python 吧

-w498

知道什么叫 util 吗?

-w626

Intellij IDEA 都知道会有空指针, 你还这么写?

-w707

不能直接 return 吗? 练打字吗?

-w480

面试题之 String, StringBuilder, StringBuffer

JDK 5 以后 JVM 对字符串循环拼接的处理方式

-w498

老铁, 类注释, 方法注释呢

类注释呢?

方法注释虽然有, 但是不标准啊, 老铁

没看见那么多黄色警告吗?

-w514

代码规范我们后面说

-w619

每个模块都有一个 StringUtil, 还有叫 StringUtils 的

老铁, 写之前先看看能不能复用啊, 或者复制之前, 看是不是已经有了啊.

你以为把 DDL 语句拷贝过来就不用写字段注释了吗?

老铁, 你这样骚操作我很为难啊

-w554

在类上按 F1 看不到类注释啊

-w762

这样改啊

-w459

F1 直接看类注释啊, 不用跳转了啊

-w769

F1 直接看字段注释啊, 不用再去查 DDL 了啊, 不会在蒙圈了啊

-w554

老铁, 不是中文看不懂啊

额, 这个要怪 idea 了, 居然没有默认转换

-w568

-w851

老铁, 把 transpartent 打开, 你就认识中文了

-w570

老铁, 看见黄色警告了? 如果是自己解析配置, 没有处理空白符的话, 又出 bug 了啊..啊.

老铁, 代码用 UTF-8 啊, 不然要乱码啊

-w488

全都要 UTF-8 啊, 要跟国际接轨啊

-w1109

老铁, 0是啥, 1是啥, 2又是啥啊? 脑壳都大了啊...

定义个常量啊, 常量名用拼音也比没有好啊, 老铁

-w943

-w405

论 MVC 架构的职责

dao 就是对表的操作, 一个 dao 对应一张表; service 组合多个 dao进行业务处理; controller 做参数检查, 结果封装, 跳转页面;

-w819

你咋不把所有的 sql 都写在一个 xml 里面呢?

-w632

这个也要注入? 也能注入?

😅😂🤣

-w616

多余的 finally

redis-proxy 已经对 jedis 资源的安全释放做了处理, 不用自己在写这些冗余的代码

-w1274

catch 里面不要做流程控制, OK?

-w973

改为

-w943

log 输出错误

日志的正确使用姿势, 你值得了解一下

推荐去搜一下 log 的正确输出方式.

-w434

log.error("访问 redis 异常", e);
1

做人能不能真诚一点, 写代码能不能简单一点

-w806

改为:

IavpResponse iavpResponse = HttpUtil.sendPost(inputParams, "gatherkey", Integer.parseInt(timeOut));
if(iavpResponse.getStatusCode() == HttpStatus.SC_OK){
    return XmlConverUtil.readGatherKeyXmlOut(iavpResponse.getContent());
}
1
2
3
4

XmlConverUtil.java

public static List<GatherKeyInfo> readGatherKeyXmlOut(String xml) {
        if(StringUtils.isBlank(xml)){
            return null;
        }
        ...
}
1
2
3
4
5
6

isNotEmpty 和 isNotBlank 的区别知道吗?

-w915

改为:

-w891

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;
        }
    }
1
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;
        }
    }
1
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;
        }
    }
1
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());
    }
1
2
3
4
5

日志问题

-w818

老铁, 日志输出到文件要用 UTF-8 啊

不然乱码看不懂啊

-w846

老铁, 日志输出能不能统一格式啊?

老铁, 日志输出能不能分级别啊?

老铁, 日志框架能不能统一使用一个啊?

一会 log4j, 一会 log4j2的 做人喜新厌旧可以(log4j2更新, 效率更好) 但也要专一, 说好放学别走就不能走, 要跑... 说好用 log4j2 + slf4j, 就不要用 System.out.println() OK?

Maven 问题

老铁, 一个模块这么多版本啊, 怎么管理啊

maven 用来管理项目中的依赖关系的, 这个没使用 maven 有什么区别?

拷贝依赖的时候看没看是不是存在了?

-w580

老铁, 不要只晓得拷贝依赖, 不看看依赖冲突啊

-w936

Last Updated: 7/3/2019, 6:17:56 PM