重构第八章
2.Replace Data Value With Object(以对象取代数据值)
你有一笔数据项,需要额外的数据和行为。将这笔数据项编程一个对象
Example:
class Order...
public Order (string customer) {
_customer = customer;
}
public string getCustomer() {
return _customer;
}
public void setCustomer(string arg) {
_customer = arg;
}
private:
string _customer;
Analyse:
Replace Data Value With Object(以对象取代数据值)将一个复杂的数据项提炼到一个class中,通过关联到新建的class中,完成程序中已有的功能。
End:
class Customer {
public Customer(string name) {
_name = name;
}
publid string getCustomerName() {
return _name;
}
private:
string _name;
}
class Order...
public Order(string customer) {
_customer = new Customer(customer);
}
public string getCustomer() {
return _customer.getCustomerName();
}
private:
Customer _customer;
public void setCustomer(string arg) {
_customer = new Customer(arg);
}
Conclusion:
结果中,将Customer数据单独独立称为一个class,Order中保留了一份Customer实体对象。
示例代码提供的功能:
public string getCustomer() {
return _customer;
}
由以下代码实现
public string getCustomer() {
return _customer.getCustomerName();
}
如还有其他有关customer的功能,可以添加到Customer class中,使得Order class 相对显得比较简洁,职责单一一些。
不过,我觉得这样可能添加了比较多的委托,每一个功能调用都要通过Order的委托函数,可能这个时候会使用Remove_Middle_Man(去除中间层)的方法,减少委托。
注意
重构必须在有单元测试的情况下,保证之前的功能修改后不收影响。切记!!!
网友评论