Skip to content

Latest commit

 

History

History
56 lines (41 loc) · 2.05 KB

005_DRY.md

File metadata and controls

56 lines (41 loc) · 2.05 KB

关于DRY原则

Don't repeat yourself.

违反DRY的情况

  • 代码重复
  • 注释或者文档违反DRY
  • 数据对象违反DRY

例如一个方法。写了好多的注释解释代码的执行逻辑,后续修改的这个方法的时候可能忘记修改注释, 造成对代码理解的困难。实际应用应该使用KISS原则,将方法写的见名知意,尽量容易阅读。注释不必过多。

例如类:

class User{
  String id;
  Date registerDate;
  int age;
  int registeredDays;
}

其中 age可以由身份证号码算出来,而且每年都会递增。 注册会员多少天了,也可以算出来。所以是不是可以考虑数据字段只存储id和注册时间。其余两个字段可以算出来。

class User{
  String id;
  Date registerDate;
  int age;
  int registeredDays;
  User(String id, Date registerDate){
    this.id = id;
    this.registerDate = registerDate;
    // age = calcAge();
    // registerDate = calcRegisteredDays;
  }
}

注意:

DRY不是只代码重复,而是“知识”的重复,意思是指业务逻辑。例如由于沟通不足,两个程序员用两种不同的方法实现同样功能的校验。 DRY is about the duplication of knowledge, of intent. It’s about expressing the same thing in two different places, possibly in two totally different ways.

当代码的某些地方必须更改时,你是否发现自己在多个位置以多种不同格式进行了更改? 你是否需要更改代码和文档,或更改包含其的数据库架构和结构,或者…? 如果是这样,则您的代码不是DRY。

when some single facet of the code has to change, do you find yourself making that change in multiple places, and in multiple different formats? Do you have to change code and documentation, or a database schema and a structure that holds it, or…? If so, your code isn’t DRY.

参考

The Pragmatic Programmer: your journey to mastery, 20th Anniversary Edition (2nd Edition)

TODO: 2019年9月份出的书,目前中文版还没有。找到英文版后放上来。