第1章 整洁代码
- 能通过所有测试
- 没有重复的代码
- 体现系统中的全部设计理念
- 包括尽量少的实体,比如类、方法、函数等
第2章 有意义的命名
第3章 函数
- 短小
- 只做一件事
- 每个函数一个抽象层级
- Switch语句
- 使用描述性的名称
- 函数参数(尽可能少)
- 无副作用
- 分割指令与询问
- 使用异常替代返回错误码:try/catch
- 别重复自己
- 结构化编程:函数中每个代码块都应该有一个入口、一个出口。每个函数只该有一个return语句,循环中不能有break或continue语句。
第4章 注释
- 注释不能美化糟糕的代码
- 用代码来阐述
- 好注释:法律信息、提供信息的注释、对意图的注释、阐释、警示、 TODO注释(解释了为什么该函数的实现部分无所作为,将来应该是怎样)、放大(突出重要性)、公共API中的Javadoc。
- 坏注释:楠楠自语、多余的注释、误导性注释、循规式注释、日志式注释、废话注释
第5章 格式
- 格式的目的:提高代码的可读性
- 垂直格式
- 横向格式
- 团队规则
- 鲍勃大叔的格式规则
第6章 对象和数据结构
- 数据抽象
不愿曝露数据细节,更愿意以抽象形态表述数据。
曝露行为,隐藏数据。 - 数据、对象的反对称性
- 得墨忒耳律
- 数据传送对象
第7章 错误处理
- 使用异常而非返回码
- 先写Try-Catgch-Finally语句
- 使用不可控异常
- 给出异常发生的环境说明
- 依调用者需要定义异常类
- 定义常规流程
- 别返回null值
- 别传递null值
第8章 边界
- 使用第三方代码
- 浏览和学习边界
- 学习性测试(帮助我们增进对API的理解)
- 整洁的边界
第9章 单元测试
- TDD(测试驱动开发)三定律
定律一:在编写不能通过的单元测试前,不可编写生产代码。
定律二:只可编写刚好无法通过的单元测试,不能编译也算不通过。
定律三:只可编写刚好足以通过当前失败测试的生产代码。 - 保持测试整洁
- 整洁的测试:可读性
- 每个测试一个断言
- F.I.R.S.T:快速(Fast)、独立(Independent)、可重复(Repeatable)、自足验证(Self-Validating)、及时(Timely)
第10章 类
- 类的组织
- 类应该短小:SRP单一权责原则(类或模块应有且只有一条加以修改的理由)、内聚、保持内聚性就会得到许多短小的类
- 为了修改而组织
第11章 系统
- 将系统的构造与使用分开
- 分解main
- 扩容
- Java代理
- 纯Java AOP框架
- AspectJ的方面
- 测试驱动系统架构
- 优化决策
- 明智使用添加了可论证价值的标准
- 系统需要领域特定语言