封面
版权信息
版权声明
内容提要
序言
前言
作者简介
封面简介
资源与支持
第一部分 理论
第1章 代码质量
1.1 代码如何变成软件
1.2 代码质量目标
1.3 代码质量的支柱
1.4 编写高质量代码是否会拖慢进度
1.5 小结
第2章 抽象层次
2.1 空值和本书中的伪代码惯例
2.2 为什么要创建抽象层次
2.3 代码层次
2.4 微服务简介
2.5 小结
第3章 其他工程师与代码契约
3.1 你的代码和其他工程师的代码
3.2 其他人如何领会你的代码的使用方法
3.3 代码契约
3.4 检查和断言
3.5 小结
第4章 错误
4.1 可恢复性
4.2 鲁棒性与故障
4.3 错误报告方式
4.4 报告不可恢复的错误
4.5 报告调用者可能想要从中恢复的错误
4.6 不要忽视编译器警告
4.7 小结
第二部分 实践
第5章 编写易于理解的代码
5.1 使用描述性名称
5.2 适当使用注释
5.3 不要执着于代码行数
5.4 坚持一致的编程风格
5.5 避免深嵌套代码
5.6 使函数调用易于理解
5.7 避免使用未做解释的值
5.8 正确使用匿名函数
5.9 正确使用新奇的编程语言特性
5.10 小结
第6章 避免意外
6.1 避免返回魔法值
6.2 正确使用空对象模式
6.3 避免造成意料之外的副作用
6.4 谨防输入参数突变
6.5 避免编写误导性的函数
6.6 永不过时的枚举处理
6.7 我们不能只用测试解决所有此类问题吗
6.8 小结
第7章 编写难以被误用的代码
7.1 考虑不可变对象
7.2 考虑实现深度不可变性
7.3 避免过于通用的类型
7.4 处理时间
7.5 拥有单一可信数据源
7.6 拥有单一可信逻辑来源
7.7 小结
第8章 实现代码模块化
8.1 考虑使用依赖注入
8.2 倾向于依赖接口
8.3 注意类的继承
8.4 类应该只关心自身
8.5 将相关联的数据封装在一起
8.6 防止在返回类型中泄露实现细节
8.7 防止在异常中泄露实现细节
8.8 小结
第9章 编写可重用、可推广的代码
9.1 注意各种假设
9.2 注意全局状态
9.3 恰当地使用默认返回值
9.4 保持函数参数的集中度
9.5 考虑使用泛型
9.6 小结
第三部分 单元测试
第10章 单元测试原则
10.1 单元测试入门
10.2 是什么造就好的单元测试
10.3 专注于公共API,但不要忽略重要的行为
10.4 测试替身
10.5 挑选测试思想
10.6 小结
第11章 单元测试实践
11.1 测试行为,而不仅仅是函数
11.2 避免仅为了测试而使所有细节可见
11.3 一次测试一个行为
11.4 恰当地使用共享测试配置
11.5 使用合适的断言匹配器
11.6 使用依赖注入来提高可测试性
11.7 关于测试的一些结论
11.8 小结
附录A 巧克力糕饼食谱
附录B 空值安全与可选类型
附录C 额外的代码示例
更新时间:2022-12-01 19:13:47