拆分变量Split Variable
- 动机:如果变量被赋值超过一次,就意味着它们在函数中承担了一个以上的责任。如果变量承担多个责任,它就应该被拆分为多个变量,每个变量只承担一个责任。同一个变量承担两件不同的事情,会令代码阅读者糊涂。
字段改名Rename Field
- 动机:对于程序中广泛使用的记录机构,字段的命名很重要。数据结构对于帮助阅读者理解特别重要。数据结构是理解程序行为的关键。
以查询取代派生变量Replace Derived Variable with Query
- 动机:可变数据是软件中最大的错误源头之一。有些变量其实可以很容易地随时计算出来。如果能去掉这些变量,页算朝着消除可变性的方向迈出了一大步。计算常能更清晰地表达数据的含义,而且也避免了“源数据修改时忘了更新派生变量”的错误。
- 在上面例子中,baseTotal是之前的数据,aNumber是新的数据,discounterTotal是计算出来的变量。
将引用对象改为值对象Change Reference to Value
- 动机
将值对象改为引用对象 Change Value to Reference
- 动机:一个数据结构中可能包含多个记录,而这些记录都关联到统一个逻辑数据结构。例如,我可能会读取一系列订单数据,其中有多条订单属于同一个顾客。遇到这样的共享关系时,既可以把顾客信息作为值对象来看待,也可以将其视为引用对象。如果将其视为值对象,那么每份订单数据中都会复制客户的数据;而如果将其视为引用对象,对于一个顾客,就只有一份数据结构,会有多个订单与之关联。如果顾客数据永远不修改,那么两种处理方式都可以。如果共享的数据需要更新,将其复制多份的做法就会遇到巨大的困难。此时必须找到所有的副本,更新所有对象。只要漏掉一个副本没有更新,就会遭遇到麻烦的数据不一致问题。在这种情况下,可以考虑将多份数据副本变成单一的引用,这样对顾客数据的修改就会立即反映在该顾客的所有订单中。
Replace Magic Literal
- 动机:替换掉魔法字面常量