命名
- 名副其实,避免误导
- 有意义的区分,
- 长名称胜过短名称,做到可搜索
函数
- 函数应该短小
- 函数只做一件事,不要太复杂
- 函数中的语句应该在同一抽象层级上,不要混杂不同抽象层级
- 函数名要具有描述性,能对应函数功能,且能区分
- 参数应该尽量少,如果参数太多,应该把几个参数抽象成对象
- 使用异常替代返回错误码
- 抽离try-catch语句,处理错误的函数不该做其他事
- 减少重复代码
注释
- 注释不能美化糟糕的代码
- 用代码阐述你在干什么
- 好的注释
- 提供信息的注释
- 警示
- TODO注释
- Javadoc
- 坏的注释
- 喃喃自语
- 多余的注释
- 误导性注释
- 可怕的废话
- 注释掉的代码
- 函数头
格式
- 垂直格式,留有适当空格
- 水平格式,要对齐代码
对象和数据结构
- 过程式代码便于在不改动既有数据结构的前提下添加新函数,使用面向对象代码便于在不改动既有函数的前提下添加新类
- 德墨忒尔律
- 火车失事,连串调用通产被认为是肮脏的风格
- DTO(最为精炼的数据结构)
错误处理
- 使用异常而非返回码
- 别返回null值
- 别传递null值
边界
- 学习性测试
单元测试
-
TDD三定律
-
保持测试整洁,测试代码和生产代码一样重要
-
每个测试一个断言,每个测试一个概念
-
F.I.R.S.T原则(Fast,Independent,Repeatable,Self-Validating,Timely)
类
-
类应该从一组变量开始,如果有公共静态变量,应该先出现,然后是私有静态变量,以及私有实体变量,很少会有公共变量
-
类应该短小,遵守单一职责原则(SRP)
-
系统应该由许多短小的类而不是少量巨大的类组成
-
保持内聚性就会得到许多短小的类,,内聚性高,意味着方法和变量是相互依赖的,互相结合成一个逻辑整体
-
对扩展开发,对修改封闭(开放-闭合原则OCP)
-
类应该依赖于抽象而不是具体细节,通过部件之间的解耦来隔离修改(依赖倒置原则DIP)
系统
- 将系统的构造和使用分开
- 分解main
- 工厂
- 依赖注入
- 面向切面编程AOP
- Java代理
迭进
- 运行所有测试(紧耦合的代码难以编写测试)
- 重构(测试消除了清理代码时害怕破坏原有代码的恐惧)
- 不可重复(小规模复用,模板方法模式)
- 增强代码的表达力
- 尽量少的类和方法
网友评论