跳转到内容

第五部分导读:重新组织数据

前几部分移动的是代码,这一部分动的是数据本身的形态:一个变量装几种东西,一个字段叫什么名字,一个值该存下来还是现算,一个对象该被共享还是各持一份。

数据的形态出了问题,代码会跟着别扭。一个变量先存周长、后存面积,读到后半段的人得往回翻才知道它此刻是什么;一个字段存着别的字段算出来的结果,每次源数据变了都要记得同步,忘了就是一个隐蔽的 bug;一个可变对象被几处共享,一处改了别处跟着变,没人知道是谁改的。这一部分的四个手法分别对付这几种情况,规模都不大,但它们减少的是最难排查的那类错误:值不对,却不知道是什么时候变的。

手法 一句话 流行度 档
拆分变量(第 30 章) 一个变量只装一种东西 ★★ 精简
字段改名(第 31 章) 给字段一个准确的名字 ★ 速览
以查询取代派生变量(第 32 章) 能算出来的值不要存 ★★ 精简
将引用对象改为值对象 / 将值对象改为引用对象(第 33 章) 决定对象该被共享还是各持一份 ★★ 精简

闻到什么味道先看哪一章:

  • 可变数据,一个变量被赋值两次,含义却不同 → 第 30 章 拆分变量。
  • 神秘命名,字段名和它存的东西对不上 → 第 31 章 字段改名。
  • 可变数据,一个字段存着别的字段的计算结果,要靠人记得同步 → 第 32 章 以查询取代派生变量。
  • 可变数据,共享的对象被一处修改、别处意外跟着变 → 第 33 章 将引用对象改为值对象;同一个实体在多处各有一份副本、改不全 → 同一章的反向手法。