读《重构-改善既有代码的设计》第八章:重新组织数据

1、Self Encapsulate Field(自封装字段)

与某字段的耦合关系逐渐变得笨拙。
为这个字段建立强制/设置函数,并以这些函数开访问字段。
private string name;
public string GetName(){ 
	return name;
}
public void SetName(string _name){
	name =  _name;
}

或者:

private string name;
public String Name {
	get{ return name; }
	Set{ name = value; }
}

或者:

public String Name { get; Set; }
  • 为字段建立Get Set方法,
  • 修改该字段的所有引用点

2、Replace Data Value With Object(以对象取代数据值)

某一数据,需要与其他数据一起使用,或者需要对数据进行多项处理
把数据封装成对象,把处理方法移进去

3、Change Value to Reference(将值对象改为引用对象)

一个类存在许多类型、职责、功能相同的实例,
将这些对象变成引用对象

4、Change Reference to Value(将引用对象改为值对象)

有一个对象,很小且不可变,并不易管理。把他变成一个值对象。

是用引用对象还是用值对象,这是一个问题。
个人建议先使用值对象,当值对象难以使用时再改为引用对象

5、Replace Array with Object(以对象取代数组)

有一个数组,其中的元素各自代表不同的东西。
以对象替换数组,对于数组中的每一个元素,以一个字段表示。
string[] student =new string[]{"小明","三一班","150"};
public class Student {
	public string name;
	public string class;
	public string height;
}

6、Duplicate Observed Data(复制“被监视数据”)

  • 一个分层良好的系统,应该将处理用户界面和处理业务逻辑的代码分开。
    比较有名的就是MVC模式

7、Change Unidirectional Associate to Bidirectional(将单项关联改为双向关联)

两个类都需要使用对方特性,但只有一方(A)引用另一方(B)
给B添加对A的引用。

双向,万恶之源。

8、Change Bidirectional Associate to Unidirectional(将双向关联改为单项关联)

两个类之间有双向关联,但其中一个类如今不在需要另一个类的特性。
去除不必要的关联

9、Replace Magic Number with Symbolic Constant(以字面常量取代魔法书)

有一个字面数值,带有特别含义。
创建一个常量,根据其意义为它命名,并将字面数值替换成这个常量。
return height > 130;

==>:

int FREEHEIGHT = 130;
return height > FREEHEIGHT ;

10、Encapsulated Field(封装字段)

  • 请看自封装字段

11、Encapsulated Collection(封装集合)

有个函数返回一个集合,让这个函数返回该集合的一个副本,并再这个类中提供曾/删集合元素的函数。

上一章:读《重构-改善既有代码的设计》第七章:在对象之间搬移特性

下一章:读《重构-改善既有代码的设计》第九章:简化条件表达式

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值