重构笔记――搬移字段

本文是在学习中的总结,欢迎转载但请注明出处:http://blog.csdn.net/pistolove/article/details/42780243



        在上1篇文章中介绍了搬移函数。本文将介绍“搬移字段”这类重构手法。

        下面让我们来学习这类重构手法吧。



开门见山


        发现:程序中某个字段被其所驻类以外的另外一个类更多地用到。

        解决:在目标类新建1个字段,修改原字段的所有用户,令它们改用新字段。

动机


        在类之间移动状态和行动,是重构进程必不可少的措施。随着软件开发的不断前进,你会发现需要新的类,并需要将现有的工作责任拖到新的类中。在这个星期看似公道正确的设计,到下个星期可能不再正确。这固然没啥问题,但是如果你历来没遇到这类情况,那才是有问题的。

        如果发现,1个字段在其所驻类以外的另外一个类有更多函数使用了它,就应当斟酌搬移这个字段。所谓“使用”多是通过设值/取值函数间接进行的。可能也会触及移动该字段的用户(函数),这取决因而否需要保持接口不变化。如果这些函数看上去很合适待在原地,就选择搬移字段。

        在使用“提炼函数”的时候,也可能需要搬移字段。这时候会选择先搬移字段,然后搬移函数。




做法


(1)如果字段的访问级别是public,将其封装起来。
(2)编译,测试。
(3)在目标类中建立与原字段相同的字段,并同时建立相应的设值/取值函数。
(4)编译目标类。
(5)决定如何在原对象中援用目标对象。
(6)删除原字段。
(7)将所有对原字段的援用替换为对某个目标函数的调用。
(8)编译,测试。

示例


        我们还是从前1篇文章中的Account类开始:
class Account {
private AccountType _type;
private double _interestRate;

double interestForAmount_days(double amount, int days) {
return _interestRate * amount * days / 365;
}
}

        我想把表示利率的_interestRate搬移到AccountType类中。目前有1些函数援用了它,interestForAmount_days()就是其中之1。下1步需要在AccountType中建立_interestRate字段和相应的访问函数:
class AccountType {
private double _interestRate;

void setInterestRate(double rate) {
_interestRate = rate;
}

double getInterestRate() {
return _interestRate;
}
}

        这时候候就能够编译新的AccountType类了。

        现在需要让Account类中访问_interestRate字段的函数转而使用AccoutType对象,然后删除Account类中的_interestRate字段。此时,必须删除原字段,才能保证其访问函数的确改变了操作对象,由于编译器会帮助我们的。
class Account {
private AccountType _type;

double interestForAmount_days(double amount, int days) {
return _type.getInterestRate() * amount * days / 365;
}
}

使用自我封装


        如果有很多的函数使用了_interestRate字段,就应当先使用自我封装:

// 自我封装
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();
}
}

   
   
 在以后的开发中,若有必要,我可以修改访问函数的用户,让它们使用新对象。使用自我封装使得以更轻松地使用“搬移函数”将函数搬移到目标类中。如果待搬移函数援用了字段的访问函数,那些援用点就无需修改了。


        本文主要介绍了重构手法――搬移字段。随着开发的不断深入,类的数量愈来愈多,可能你会发现最开始放在1个类中的字段和后来新增的类有更多的交换,这样我们就应当将该字段搬移到使用它更多的类中。
        最后,希望本文对你有所帮助。有问题可以留言,谢谢。(PS:下1篇将介绍重构笔记――提炼类)


重构笔记文章以下

       重构笔记――入门篇

       重构笔记――代码的坏味道(上)

       重构笔记――代码的坏味道(下)

       重构笔记――构筑测试体

       重构笔记――提炼函数

       重构笔记――内联函数

       重构笔记――内联临时变量

       重构笔记――以查询取代临时变量

       重构笔记――引入解释性变量

       重构笔记――分解临时变量

       重构笔记――移除对参数的赋值

       重构笔记――搬移函数
       重构笔记――搬移字段
波比源码 – 精品源码模版分享 | www.bobi11.com
1. 本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长!
2. 分享目的仅供大家学习和交流,您必须在下载后24小时内删除!
3. 不得使用于非法商业用途,不得违反国家法律。否则后果自负!
4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解!
5. 如有链接无法下载、失效或广告,请联系管理员处理!
6. 本站资源售价只是赞助,收取费用仅维持本站的日常运营所需!
7. 本站源码并不保证全部能正常使用,仅供有技术基础的人学习研究,请谨慎下载
8. 如遇到加密压缩包,请使用WINRAR解压,如遇到无法解压的请联系管理员!

波比源码 » 重构笔记――搬移字段

发表评论

Hi, 如果你对这款模板有疑问,可以跟我联系哦!

联系站长
赞助VIP 享更多特权,建议使用 QQ 登录
喜欢我嘛?喜欢就按“ctrl+D”收藏我吧!♡