Replace Data Value with Object 以对象取代数据值
你有一个数据项,需要与其他数据和行为一起使用才有意义。将数据项变成对象。
动机
开发初期,你往往决定以简单的数据项表示简单的情况。但是,随着开发的进行,你可能会发现,这些简单数据项不再那么简单了。比如说,一开始你可能会用一个字符串来表不“电话号码”概念,但是随后你就会发现,电话号码需要“格式化”、“抽取区号”之类的特殊行为。如果这样的数据项只有一两个,你还可以把相关函数放进数据项所属的对象里;但是Duplicate Code坏味道和Feature Envy坏味道很快就会从代码中散发出来。当这些坏味道开始出现,你就应该将数据值变成对象。
做法
- 为待替换数值新建一个类,在其中声明一个final字段,其类型和源类中的待替换数值类型一样。然后在新类中加入这个字段的取值函数,再加上一个接受此字段为参数的构造函数。
- 编译。
- 将源类中的待替换数值字段的类型改为前面新建的类。
- 修改源类中该字段的取值函数,令它调用新类的取值函数。
- 如果源类构造函数中用到这个待替换字段(多半是赋值动作),我们就修改构造函数,令它改用新类的构造函数来对字段进行赋值动作。
- 修改源类中待替换字段的设值函数,令它为新类创建一个实例。
- 编译,测试。
- 现在,你有可能需要对新类使用Change Value to Reference。