clean code 代码整洁之道 读书笔记

有意义的命名

  1. 命名需明确其作用。
  2. 命名需避免误导。
  3. 做有意义的区分。
  4. 使用能读的出来的命名。
  5. 使用可搜索的名称。
  6. 类名应该是名词或名词性短语。
  7. 方法名应当是动词或动词短语。
  8. 不要使用俗语、俚语作为命名。
  9. 相同的概念应使用相同的词,如get方法代表获取。
  10. 赋予命名语境,“state”无法得知与地址有关,使用addressState会好很多。更好的方案是创建Address。
  11. 不要添加多余、没用的语境。

函数

  1. 短小,函数的缩进层级不应多于一层或两层。
  2. 只做一件事。
  3. 一个函数一个抽象层级,使得代码是自顶向下的。
//错误示范
void 煮番茄汤() {
     
	番茄去皮();
	煸炒番茄();
	加水();
	切豆腐();
	炖豆腐();
}
//正确示范
void 煮番茄汤() {
     
	处理番茄();
	加水();
	处理豆腐();	
}

void 处理番茄() {
     
	番茄去皮();
	煸炒番茄();
}

void 处理豆腐() {
     
	切豆腐();
	炖豆腐();
}
  1. 使用工厂方法将switch语句隐藏在抽象工厂地下,不让任何人看到。
  2. 函数参数最多不超过3个。
  3. 不要使用boolean作为函数参数。
  4. 使用异常替代返回错误码,try和catch代码不得过长。

对象和数据结构

将变量设为私有(private)有一个理由:我们不想其他人依赖这些变量,还想再心血来潮时自由修改其类型或实现。那么还是有很多程序员给对象自动添加get、set,这和将私有成员公开有什么区别?

  1. 数据抽象:使用抽象的形态表述数据,不要暴露数据的细节。抽象形态 > get、set方法 > 优于直接公开数据。
  2. 面向对象和面向过程的区别,面向过程便于不改动既有数据结构的前提下添加新函数。面向对象便于不改动函数的前提下添加新类(多态)。
  3. 德墨忒律,模块不应了解它所操作对象的内部情形。
    类C的方法f()只应该调用以下对象的方法:
    (1) 类C的方法
    (2)由f创建的对象
    (3)作为参数传递给f的对象
    (4)由C实体持有的对象
  4. 数据传送对象:最为精炼的数据结构是只有公共变量没有函数的类。这种数据结构有时被称为数据结构传送对象或DTO。最常见的是各种bean类的使用。

  1. 类应当短小
    类应该只有单一权责原则,即类或模块应有且只有一条加以修改的理由。
    系统应当由许多短小的类组成。每一个小类封装一个权责,只有一个被修改的理由,并与少数其他类一起协同工作达成期望的系统行为。
  2. 内聚:类的方法操作的成员变量越多,内聚性越高。
  3. 低耦合:使用代理接口连接不同的对象。

你可能感兴趣的:(java)