《代码整洁之道》的一些总结

本文档详述了软件开发过程中的代码规范与最佳实践,包括命名规则、方法设计、注释编写、日志记录、单元测试等内容,并提供了git提交规范指导。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1. 命名
    (1) 有效的命名,言简意赅,可读性高;
    (2) 在同一个类中,命名方式要保持一致;
        a. 使用驼峰就全用驼峰;URL使用下划线,那所有的URL就都用下划线;
        b. 比如HttpServletResponse用response名称,其他HttpServletResponse也用response名称;

2. 方法

    (1) 一个方法尽量不超过一屏的行数;尽量30行以下;

    (2) 方法的缩进层次应该不多于一层或两层;

    (3) 方法应该只做一件事,如何确定只做一件事()是否能再拆出一个函数);

    (4) 巧用工厂设计模式;

    (5) 函数参数个数,最好0个,最多应该不超过3个参数;

    (6) 参数类型不要传boolean。如果要用boolean,可以考虑用两个方法(不太赞同);

    (7) 多个参数,参数类型尽量统一在同一个层次上,int -> int ;

    (8) 参数多用dto对象;

    (9) 函数应该修改某对象的状态,或返回该对象的有关信息,不要两样同时做;

    (10) 先写try-catch, 然后将try-catch中的业务代码单独封装成一个方法;如 try{delete();}

    (11) 缩小exception的范围,传递足够多的信息给catch块,catch中尽量不要涉及逻辑;

    (12) 如果exception太多,定义一个类专门处理(多用于第三方包);

    (13) 方法处理是一件事,异常处理就是一件事;

    (14) 避免重复代码,将重复代码提取出来做成公共方法;

    (15) 尽量不要返回null;比如,List返回空列表,可以用Collections.emptyList();

	public static <T> List<T> getList() {
		return Collections.emptyList();
	}

    (16) 将初始化与使用分开;

    (17) 写方法时,考虑参数为null和空字符串的场景;

    (18) 在一些有可能会出现并发的情况下,使用concurrentHashMap替代HashMap;

3. 注释
    (1) 注释不要太多,少用html注释,html注释应该是工具而非程序员来加的;

4. 日志

    (1) 方法入口:[日志级别][业务功能][参数];

    (2) 异常处理(仅限需要自行处理的异常):[日志级别][业务功能][参数][异常描述];

    (3) 外部接口调用开始: [日志级别][业务功能][调用接口名称][参数];

    (4) 外部接口调用结束:[日志级别][业务功能][调用接口名称][调用结果][返回值];

    (5) 内部接口调用:不建议打印日志;

    (6) 方法出口: [日志级别][业务功能][返回值];

    (7) 循环中:不建议打印日志;

    (8) 敏感数据:用户账号、密码、个人信息等敏感数据不允许打印日志。


    名词解释:

    (1) 参数:打印传入参数,实体类建议实现toString方法;

    (2) 调用结果:成功,失败,不确定;

logger.info("[getUserInfo]用户查询参数:", inputData);

5. 单元测试 
    (1) 整体应分为三个环节:

       a. make 构造测试数据;

        b. submit 操作测试数据;

        c. assert 检验是否得到期望的结果;

    (2) 单元测试中单个测试的断言数量应最小化,一个最好,即每个方法只测试一个概念;

    (3) 测试原则:

        a. 测试应该有布尔值输出,来确定测试有没有通过;

        b. 测试应该独立,可以单独运行一个测试不应成为下一个测试的条件;

        c. 测试边界条件,测试空值;

        d. 是否覆盖完整;

    (4) TDD,先测试代码,再编写程序;

6. 类相关

    (1) 类设计时,考虑单一原则;

    (2) 从整体想问题,方法是否正确,是否是最优解;

    (3) 有没有自己没有考虑到的情况,每种边界,每种极端,每个异常;

    (4) 可维护:代码不能写死,代码容易修改,预测可能发生的变化;如果某天要修改的话,使修改的东西很少;

    (5) 尽量避免废弃代码的出现,即永远不会被调用到的,if,catch,util包,switch,case等中出现的;

    (6) 使用一些代码覆盖工具,查看有没有一直没有被调用的方法;

    (7) 移除没用的构造器,变量,注释,引用,函数等;

    (8) 用多态代替if/else,switch/case;

    (9) 多使用枚举,使用枚举代替常量;

    (10) 在代码中做决定时,确认自己足够准确,如调用可能返回null的函数,确认自己检查了null值;如果有可能有并发更新,确认你实现了某种锁定机制;

    (11) 应该把解释了条件意图的函数抽离出来,如使用if(should(timer))代替if(timer.hasExpired() && timer.isRight());

    (12) 封装边界条件,把边界有关的条件封装到一起,形成一个方法;

7. 文档:
    (1) 编写对应的接口文档,详细设计文档;

8. git提交的一些规范

    (1) 每完成了一个独立的功能或解决了一个bug才push;

    (2) 每次push确保本地测试完全通过;

    (3) 如果本地提交记录较多,比较乱,建议 push 之前,本地先 git rebase -i, 可以合并多个提交,修改提交顺序,以及更改 commit message; 

    (4) 涉及多分支开发合并的,尽量rebase后,再merge,确保commit history清晰;

    (5) 多push,避免本地代码丢失,前功尽弃;


参考:《代码整洁之道》

参考:git提交

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值