`

重新组织数据(一)

阅读更多

一、Self Encapsulate Field

你直接访问一个字段,但是与字段之间的耦合关系逐渐变得笨拙。

 

为这个字段建立取值/设值函数,并且只以这些函数来访问字段。

 

间接地通过函数访问变量的好处是:1.子类可以通过复写函数来改变字段的存取路径;2.可以提供灵活的数据管理,如延迟初始化,数据值读取控制,数据值范围设置控制等。

 

当然直接访问字段的好处也是显而易见的,可以使代码易于阅读。

 

处理步骤:

 

1.为带处理字段,建立getter和setter

 

2.找出该字段的所有引用点,然后修改为访问该字段的getter或者setter函数。

 

3.修改该字段的访问权限为private

 

4.复查代码,找出所有引用点,并修改掉

 

5.编译,测试。

 

注:在构造函数中一般不使用设值函数。如果需要使用,可以统一的将所有的设值函数的调用统一放到一个初始化函数中。

 

二、Replace Data Value with Object

有一个数据项,需要与其他的数据或者行为一起使用才有意义。

 

将数据项变成对象

 

当你问道duliacte code和feature envy味道的时候,你也许就需要使用这个重构手法了。

 

重构步骤:

1.为待替换的数值新建一个类,并在新类中新建一个final的字段对应该数值。然后添加一个接受该数值为参数的构造函数。

 

2.将原类中该数值的类型修改为新建类。

 

3.修改原来该数值的取值函数,令他调用新类型的取值函数。

 

4.如果原类的构造函数中使用到该数值,那么我们就修改该构造函数,使他调用新类的构造函数为该数值字段赋值。

 

5.编译,测试。

 

6.查看是否需要,对新类使用change value to reference。一条规则:值对象的内容是不可修改的。

 

注:

1.如果不执行步骤6那么我们重构后该数值字段对于的数据类型是值类型的,他的内容是不可以修改的。如果该数值字段有setter,那么其中肯定是调用新类构造函数为该数值字段赋值的。

2.完成重构之后需要查看下各个函数的名称是否需要rename一下,比如原类中该数值的getter是否应该修改防止别人误认为返回的是新类型的对象。

 

 

 

 

 

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics