如果名称需要注释来补充,那就不算是名副其实。
别用 xxxList 来指称一组账号,除非它真的是 List 类型。(用 xxxGroup/bunchOfxxx/xxxs 代替更好)
不要使用数字区分变量 / 函数命名。如 a1,a2... 不要添加废话区分命名。如:ProductInfo 和 ProductData
比如日期:用 generationTimestamp,而不要使用 genymdhms。
单字母和数字常量很难搜出。使用宏或者变量命名这类数据。
不必用前缀表示成员变量。
类名和对象应该是名词或名词短语。
方法名应该是动词或动词短语。
避免将同一个单词用于不同目的。
尽可能使用 IT 类术语
如:使用 addrState 代替 state
如:不要用 GSD 代替 GasStationDeluxe 这样类似的短语。
- 法律信息
- 提供信息的注释
- 对意图的注释
- 阐释
- 警示
- TODO
- 放大:放大某种看起来不合理之物的重要性
- 公共 API 中的 javadoc
- 喃喃自语
- 多余的注释
- 误导性注释
- 循规式注释
- 日志式注释
- 废话注释
- 可怕的废话
- 能用函数或变量时就别用注释
- 位置标记
- 括号后面的注释
- 归属和署名
- 注释掉的代码(别这么干)
- html 注释
- 非本地信息
- 信息过多
- 不明显的联系
- 函数头
- 非公共代码中的 javadoc
C 由 f 创建的对象
由 C 的实体变量持有的对象
即:方法不应调用由任何函数返回的对象的方法。
应创建信息充分的错误信息,并和异常一起传递出去。在消息中,包括失败的操作和失败的类型。如果你的应用程序由日志系统,传递足够的信息给 catch 块,并记录下来。
- 在编写不能通过的单元测试前,不可编写生产代码。
- 只可编写刚好无法通过的单元测试,不能编译也不算通过。
- 只可编写刚好足以通过当前失败测试的生产代码。
Fast(快速)、Independent(独立)、Repeatable(可重复)、Self-Validating(自足验证)、Timely(及时)
- 运行所有测试;
- 不可重复;
- 表达了程序员的意图;
- 尽可能减少类和方法的数量。
- SRP,分离并发相关代码和其他代码。
- 推论:限制数据作用域。
- 推论:使用数据复本,避免共享数据的好方法之一就是一开始就避免共享数据。
- 推论:线程应尽可能独立。尝试将数据分解到可独立线程(可能在不同处理器上)操作的独立子集。
- 生产者-消费者
- 读者-作者
- 宴席哲学家