首页 > 代码库 > 重构笔记——搬移字段
重构笔记——搬移字段
本文是在学习中的总结,欢迎转载但请注明出处:http://blog.csdn.net/pistolove/article/details/42780243
在上一篇文章中介绍了“搬移函数”。本文将介绍“搬移字段”这种重构手法。
下面让我们来学习这种重构手法吧。
开门见山
发现:程序中某个字段被其所驻类之外的另一个类更多地用到。
解决:在目标类新建一个字段,修改原字段的所有用户,令它们改用新字段。
动机
在类之间移动状态和行为,是重构过程必不可少的措施。随着软件开发的不断前进,你会发现需要新的类,并需要将现有的工作责任拖到新的类中。在这个星期看似合理正确的设计,到下个星期可能不再正确。这当然没啥问题,但是如果你从来没遇到这种情况,那才是有问题的。
如果发现,一个字段在其所驻类之外的另一个类有更多函数使用了它,就应该考虑搬移这个字段。所谓“使用”可能是通过设值/取值函数间接进行的。可能也会涉及移动该字段的用户(函数),这取决于是否需要保持接口不变化。如果这些函数看上去很适合待在原地,就选择搬移字段。
在使用“提炼函数”的时候,也可能需要搬移字段。这时会选择先搬移字段,然后搬移函数。
做法
示例
class Account { private AccountType _type; private double _interestRate; double interestForAmount_days(double amount, int days) { return _interestRate * amount * days / 365; } }
class AccountType { private double _interestRate; void setInterestRate(double rate) { _interestRate = rate; } double getInterestRate() { return _interestRate; } }这时候就可以编译新的AccountType类了。
class Account { private AccountType _type; double interestForAmount_days(double amount, int days) { return _type.getInterestRate() * amount * days / 365; } }
使用自我封装
// 自我封装 class Account { private AccountType _type; private double _interestRate; double interestForAmount_days(double amount, int days) { return getInterestRate() * amount * days / 365; } void setInterestRate(double rate) { _interestRate = rate; } double getInterestRate() { return _interestRate; } }这样,在搬移字段之后,就只需要修改访问函数:
class Account { private AccountType _type; double interestForAmount_days(double amount, int days) { return getInterestRate() * amount * days / 365; } void setInterestRate(double rate) { _type.setInterestRate(rate); } double getInterestRate() { return _type.getInterestRate(); } }在以后的开发中,若有必要,我可以修改访问函数的用户,让它们使用新对象。使用自我封装使得以更轻松地使用“搬移函数”将函数搬移到目标类中。如果待搬移函数引用了字段的访问函数,那些引用点就无需修改了。
重构笔记文章如下
重构笔记——入门篇
重构笔记——代码的坏味道(上)
重构笔记——代码的坏味道(下)
重构笔记——构筑测试体
重构笔记——提炼函数
重构笔记——内联函数
重构笔记——内联临时变量
重构笔记——以查询取代临时变量
重构笔记——引入解释性变量
重构笔记——分解临时变量
重构笔记——移除对参数的赋值重构笔记——搬移字段