当前位置: 移动技术网 > IT编程>软件设计>架构 > 学习重构(4)-重新组织数据

学习重构(4)-重新组织数据

2019年11月05日  | 移动技术网IT编程  | 我要评论

1. self encapsulate field(自封装值域)

你直接访问一个值域,但与值域之间的耦合关系逐渐变得笨拙。为这个值域建立取值/设值函数(get/set),并且只以这些函数来访问值域。

应用场景:其实这种为每个变量提供两个操作函数的做法并不是百分百可取的,这样做的一个好处就是做到数据存储和使用隔离,尤其对于对象数据的保护是非常好的,可以返回给调用方一个数据拷贝,不用担心自己的数据会被篡改。但是也有不好的地方,就是会带来非常多的小函数,无形中增大了类的体量。

示例:

private int _low, _high

boolean includes (int arg) {

    return arg >= _low && arg <= _high;

}

重构为:

private int _low, _high

boolean includes (int arg) {

    return arg >= getlow() && arg <= gethigh();

}

int getlow() {return _low};

int gethigh() {return _high};

 

2. replace data value with object(以对象取代数据值)

将一些数据按照一定的规则或特征整合到一个对象中

应用场景:开发代码初期,仅需要一些简单的数据,比如一个人的基本信息:姓名,身份证号码,随着时间的推移,还需要其他的数据:手机号,地址,学历等等,这样就会罗列一排的变量,每次处理一个人的数据是,要传入很多参数。此时将这个人的信息就可以规整到一个类里面,仅声明一个对象即可,而且随着这个人信息的持续丰富,不会每次都冲击到原有的接口。

示例:略

 

3. change value to reference(将实值对象改为引用对象)

你有一个class,衍生出许多相等的实体,你希望将他们替换为单对象。将这个实值对象变成一个引用对象。

应用场景:我们一般使用一个类的时候都是需要了就new一个对象出来,这些每次new出来的对象就是实值对象,但很多场景下我们会改变这些对象的内部状态,并且需要对这些对象进行传递,此时用实值对象来满足这个诉求就会显得非常笨拙,比如new出来一个car,然后设置下品牌是宝马,设置下颜色是蓝色等等。这种场景下我们就需要一个引用对象,同一个类中可以是成员变量,不同的类中使用可以使用类似工厂、单例等模式来有一个对象管理类来供其他类取用。

示例:略

 

4. change reference to value(将引用对象改为实值对象)

和3相反。

应用场景:实值对象一个重要特点是保持不变,这样可以保证每个使用者不用担心数据的变化和同步。引用对象往往会让逻辑变得复杂,所以使用的时候要做好选择。

示例:略

 

5. replace array with object(以对象取代数组)

以对象替换数组,对于数组中的每个元素,以一个值域表示。

应用场景:数组是一种常见的用于组织数据的结构体。不过它们应该只用于以某种顺序容纳一组相似对象。有时候你会发现,一个数组容纳了数种不同对象,这会给数组用户带来麻烦,因为它们很难记住像“数组的第一个元素是人名“这样的约定。对象就不一样。可以通过命名和函数来传递一些信息。让使用者更容易理解。

示例:

string[] row = new string[3];

row[0] = "liverpool";

row[1] = "15";

重构为:

performance row  = new performance();

row.setname("liverpool");

row.setwins("15");

 

6. duplicate observed data(赋值“被监视数据”)

你有一笔domain data置身于gui空间中,而domain method需要访问它们。将这笔数据拷贝到一个domain object中,建立一个observer模式,用意对domain object和gui object内的重复数据进行同步控制。

应用场景:

示例:

未完待续

如对本文有疑问, 点击进行留言回复!!

相关文章:

验证码:
移动技术网