只是个数据容器的类,任人摆布
成因:
新创建一个类,然后写上get/set,这是很正常的事情,但是很多人止步于此,并没有把跟这些个get/set联系非常紧密的方法移入Data Class,导致Data Class失去了它成长的机会,它本可以不仅仅是个"Data Class"。
不能自己操作自己的数据
重构手法:
- 首先 使用Encapsulate Field(封装字段),Encapsulate Collection(封装集合),去掉直接访问数据的调用方式。对于不可修改的字段使用Remove Setting Method(移除设值函数)
- 其次 先使用 Extract Method(提炼函数)把跟Data Class紧密相关的方法提取出来,再使用Move Method (搬移函数) 把函数移入Data Class中。
- 最后你会发现get/set对外没有用处的,这时候可以用Hide Method(隐藏函数),把它们都设置成私有的。
目标:有主见的类
创建每个类的时候,把那些应该属于它的函数还给它
附录:
-
Encapsulate Field(封装字段)
class Person {
public String name;
}
class Person {
private String name;
public String getName() {
return name;
}
public void setName(String arg) {
name = arg;
}
}
-
Encapsulate Collection(封装集合)
-
Remove Setting Method(移除设值函数)
-
Extract Method(提炼函数)
void printOwing() {
printBanner();
// Print details.
System.out.println("name: " + name);
System.out.println("amount: " + getOutstanding());
}
void printOwing() {
printBanner();
printDetails(getOutstanding());
}
void printDetails(double outstanding) {
System.out.println("name: " + name);
System.out.println("amount: " + outstanding);
}
-
Move Method (搬移函数)
-
Hide Method(隐藏函数)