重構(Ruby版)
基本資料
原書名: Refactoring: Ruby Edition
原出版社: Addison-Wesley Professional
作者: (美)Jay Fields Shane Harvie Martin Fowler [作譯者介紹]
譯者: 徐旭銘[同譯者作品]
叢書名: 開發人員專業技術叢書
出版社:機械工業出版社
ISBN:9787111300786
上架時間:2010-5-5
出版日期:2010 年4月
開本:16開
更多詳細資料請查看:http://www.china-pub.com/196681
內容簡介
本書是一本專門為職業Ruby程式員編寫的重構指導。它的目標是向你展示如何以一種既受到嚴格控制又高效的方式進行重構。你將學習到不在代碼中引入bug並能按部就班改進結構的重構方式。本書的主要內容:第1章指出重構是什麼;第2章討論進行重構的理由;第3章指出需要進行重構的訊號;第4章討論測試在重構中扮演的重要角色;第5章~第12章介紹了重構花名冊,它包含了在重構領域裡到目前為止的成果。當需要進行某項任務時,這份花名冊可以手把手地提醒我們安全的做法。
本書是對Martin Fowler的經典權威著作《重構》的重大更新版,並以Ruby為例徹底重寫——並非只是把代碼從Java版中搬過來而已。
書中給出了一份詳細的重構花名冊,包含超過70條經過錘鍊的Ruby重構技術,每一條都有詳細指引、使用細節和範例代碼。其中很多重構技術都用到了Ruby專有的強大特性,你可以從華章網站下載到全部代碼。
作者借用Fowler最初的想法,展示了如何以一種受控、高效以及迭代的方式進行重構,協助你有條不紊地改善代碼的品質而不會引入新的bug。不論是編寫還是維護Ruby代碼,本書都將是不可或缺的重要參考。本書內容
理解重構的核心原則,以及進行重構的原因
發現Ruby代碼中的“壞味道”
逐步將糟糕的設計轉變成設計精良的代碼
構建測試以便保證重構正確進行
理解重構中的痛點以及克服的辦法
編寫正確封裝代碼的方法
在對象之間移動特性,將其放在最適合的地方
將資料群組織成更容易處理的形式
簡化條件運算式,更高效地利用多態
建立更易於理解和使用的介面
進行大型重構,這將可能影響整個軟體系統數月乃至數年
成功重構Ruby on Rails代碼
目錄
譯者序
序
前言
致謝
第1章重構初體驗
1.1起點
1.1.1Movie
1.1.2Rental
1.1.3Customer
1.1.4對起始程式的評價
1.2重構第一步
1.3Statement方法的分解和再組合
1.3.1移動Amount的計算
1.3.2提煉常客積分的計算
1.3.3移除臨時變數
1.4用多態替換價格代碼中的條件邏輯
1.5小結
第2章重構的基本原理
2.1重構的起源
2.2重構的定義
.2.3重構的理由
2.3.1重構可以改進軟體的設計
2.3.2重構讓軟體變得易於理解
2.3.3重構可以協助你發現bug
2.3.4重構可以協助你更快地編程
2.4重構的時機
2.4.1事不過三
2.4.2在添加功能時重構
2.4.3在需要修複bug時重構
2.4.4在進行代碼複審時重構
2.4.5為了更好地理解而重構(或者說,向著同一個目標進行重構)
2.5為什麼重構能起作用
2.6我怎麼跟經理說
2.7抽象和重構
2.8重構的問題
2.8.1改變介面
2.8.2資料庫
2.8.3難以重構的設計變化
2.8.4什麼時候不應該重構
2.9重構和設計
2.10竹籃打水一場空
2.11重構和效能
2.12最佳化薪資系統
第3章代碼裡的壞味道
3.1重複代碼
3.2方法過長
3.3類太大
3.4參數列表太長
3.5發散型變化
3.6霰彈型修改
3.7特性依賴
3.8資料泥團
3.9基本類型偏執
3.10case語句
3.11平行繼承體系
3.12冗贅類
3.13純臆測的泛化
3.14臨時欄位
3.15訊息鏈
3.16中間人
3.17過分親密
3.18異曲同工的類
3.19不完善的類庫
3.20資料類
3.21被拒絕的遺贈
3.22注釋
3.23狂熱的元編程
3.24脫節的API
3.25不斷重複的樣板文本
第4章構建測試
4.1自我測試代碼的價值
4.2Test∷Unit測試架構
4.3程式員測試和品質保證測試
4.4添加更多的測試
第5章重構花名冊
5.1重構的格式
5.2尋找引用
第6章組織方法
6.1提煉方法
6.1.1動機
6.1.2手法
6.1.3樣本:沒有局部變數
6.1.4樣本:使用局部變數
6.1.5樣本:重新給局部變數賦值
6.2內聯化方法
6.2.1動機
6.2.2手法
6.3內聯化臨時變數
6.3.1動機
6.3.2手法
6.4使用查詢替換臨時變數
6.4.1動機
6.4.2手法
6.4.3樣本
6.5使用鏈式調用替換臨時變數
6.5.1動機
6.5.2手法
6.5.3樣本
6.6引入解釋性變數
6.6.1動機
6.6.2手法
6.6.3樣本
6.6.4採用提煉方法的手法
6.7分解臨時變數
6.7.1動機
6.7.2手法
6.7.3樣本
6.8移除對參數賦值
6.8.1動機
6.8.2手法
6.8.3樣本
6.9使用方法對象替換方法
6.9.1動機
6.9.2手法
6.9.3樣本
6.10替換演算法
6.10.1動機
6.10.2手法
6.11使用集合閉包方法替換迴圈
6.11.1動機
6.11.2手法
6.11.3樣本
6.12提煉環繞方法
6.12.1動機
6.12.2手法
6.12.3樣本
6.13引入類標註
6.13.1動機
6.13.2手法
6.13.3樣本
6.14引入具名引數
6.14.1動機
6.14.2手法
6.14.3樣本1:命名全部參數
6.14.4樣本2:只命名選擇性參數
6.15移除具名引數
6.15.1動機
6.15.2手法
6.15.3樣本
6.16移除未使用的預設參數
6.16.1動機
6.16.2手法
6.16.3樣本
6.17動態方法定義
6.17.1動機
6.17.2手法
6.17.3樣本:通過def_each來定義相似的方法
6.17.4instance_exec方法
6.17.5樣本:用類標註來定義執行個體方法
6.17.6樣本:通過擴充一個動態定義的模組來定義方法
6.18使用動態方法定義替換動態接收器
6.18.1動機
6.18.2手法
6.18.3樣本:不用method_missing進行動態委託
6.18.4樣本:使用自訂資料來定義方法
6.19隔離動態接收器
6.19.1動機
6.19.2手法
6.19.3樣本
6.20把計算從運行時移到解析時
6.20.1動機
6.20.2手法
第7章在對象之間移動特性
7.1移動方法
7.1.1動機
7.1.2手法
7.1.3樣本
7.2移動欄位
7.2.1動機
7.2.2手法
7.2.3樣本
7.2.4樣本:使用自封裝
7.3提煉類
7.3.1動機
7.3.2手法
7.3.3樣本
7.4內聯化類
7.4.1動機
7.4.2手法
7.4.3樣本
7.5隱藏委託
7.5.1動機
7.5.2手法
7.5.3樣本
7.6移除中間人
7.6.1動機
7.6.2手法
7.6.3樣本
第8章組織資料
8.1自封裝欄位
8.1.1動機
8.1.2手法
8.1.3樣本
8.2使用對象替換資料值
8.2.1動機
8.2.2手法
8.2.3樣本
8.3將值對象改為引用對象
8.3.1動機
8.3.2手法
8.3.3樣本
8.4將引用對象改為值對象
8.4.1動機
8.4.2手法
8.4.3樣本
8.5使用對象替換數組
8.5.1動機
8.5.2手法
8.5.3樣本
8.5.4使用Deprecation進行重構
8.6使用對象替換Hash
8.6.1動機
8.6.2手法
8.6.3樣本
8.7將單向關聯改為雙向關聯
8.7.1動機
8.7.2手法
8.7.3樣本
8.8將雙向關聯改為單向關聯
8.8.1動機
8.8.2手法
8.8.3樣本
8.9使用符號常數代替魔法數
8.9.1動機
8.9.2手法
8.10封裝集合
8.10.1動機
8.10.2手法
8.10.3樣本
8.10.4將行為移入類裡
8.11使用資料類替換記錄
8.11.1動機
8.11.2手法
8.12使用多態替換類型碼
8.12.1動機
8.12.2移除條件邏輯
8.12.3手法
8.12.4樣本
8.13使用模組擴充替換類型碼
8.13.1動機
8.13.2手法
8.13.3樣本
8.14使用狀態或策略模式替換類型碼
8.14.1動機
8.14.2手法
8.14.3樣本
8.15使用欄位替換子類
8.15.1動機
8.15.2手法
8.15.3樣本
8.16惰性初始化的屬性
8.16.1動機
8.16.2手法
8.16.3以