多多色-多人伦交性欧美在线观看-多人伦精品一区二区三区视频-多色视频-免费黄色视屏网站-免费黄色在线

國內最全IT社區平臺 聯系我們 | 收藏本站
阿里云優惠2
您當前位置:首頁 > php開源 > php教程 > 重構筆記――搬移字段

重構筆記――搬移字段

來源:程序員人生   發布時間:2015-03-03 08:34:17 閱讀次數:3624次

本文是在學習中的總結,歡迎轉載但請注明出處: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篇將介紹重構筆記――提煉類)


重構筆記文章以下

       重構筆記――入門篇

       重構筆記――代碼的壞味道(上)

       重構筆記――代碼的壞味道(下)

       重構筆記――構筑測試體

       重構筆記――提煉函數

       重構筆記――內聯函數

       重構筆記――內聯臨時變量

       重構筆記――以查詢取代臨時變量

       重構筆記――引入解釋性變量

       重構筆記――分解臨時變量

       重構筆記――移除對參數的賦值
       重構筆記――搬移函數
       重構筆記――搬移字段




生活不易,碼農辛苦
如果您覺得本網站對您的學習有所幫助,可以手機掃描二維碼進行捐贈
程序員人生
------分隔線----------------------------
分享到:
------分隔線----------------------------
關閉
程序員人生
主站蜘蛛池模板: 亚洲国产一区二区三区最新 | 国产精品乱码一区二区三区 | 手机看片国产精品 | 999精品久久久中文字幕蜜桃 | 2021国产精品一区二区在线 | 性生交酡| 欧美黑人猛交 | jizz在亚洲| 亚洲精品人成网在线播放影院 | a级片视频网站 | 美国毛片亚洲社区在线观看 | 91亚洲国产成人久久精品网站 | 成人爱爱网站在线观看 | 成人久久精品一区二区三区 | 免费人成在线观看视频色 | 国产精品久久久久亚洲 | 免费在线观看亚洲 | 激情久久久久久久久久久 | 国产日韩欧美精品一区二区三区 | 日韩一区二区在线视频 | 自拍偷拍网站 | 国内精品一区二区三区αv 国内精品一区二区三区东京 | 亚洲 欧美 日韩中文字幕一区二区 | 亚洲高清中文字幕 | 一级爱一级做a性视频 | 国内精品麻豆 | 亚欧精品一区二区三区 | 亚洲性影院| 秋霞午夜限制土鳖免费观看 | 日韩美女福利视频 | 亚洲最大的黄色网址 | 成人免费在线视频网站 | 伊人网视频 | 看一级黄色毛片 | 日韩免费观看一级毛片看看 | 国产精品3| 久久久91精品国产一区二区三区 | 三级小视频在线观看 | 欧美日在线 | 国产呦精品一区二区三区网站 | 成在线人免费视频一区二区三区 |