2024香港最具教育競爭力中學/小學/幼稚園50強龍虎榜
2024香港最具教育競爭力中學/小學/幼稚園排名指南
最近十一年香港最具教育競爭力中學/小學/幼稚園50強完整版榜單:
2024202320222021/202019201820172016201520142013
教育競爭力評比體系說明
校風評比體系說明
服务全球华人的中英文書籍網上書店
您的購物車是空的

重構(Ruby版)

  • 作者:(美) 菲爾德斯 等 著 徐旭銘 譯
  • 出版社: 機械工業出版社
  • 出版時間:2010-04-01
  • 版次:1
  • 商品編號: 10060095

    頁數:294

    印次:1

    印刷時間:2010-04-01


HK$76.20 (速遞費用須知)
購買額滿HK$158免運費
免郵費優惠僅限香港、澳门、
台灣及中國大陸

購買數量:

內容簡介

本書是一本專門為職業Ruby程序員編寫的重構指導。它的目標是向你展示如何以一種既受到嚴格控制又高效的方式進行重構。你將學習到不在代碼中引入bug並能按部就班改進結構的重構方式。本書的主要內容:第1章指出重構是什麼;第2章討論進行重構的理由;第3章指出需要進行重構的信號;第4章討論測試在重構中扮演的重要角色;第5章~第12章介紹了重構花名冊,它包含了在重構領域裡到目前為止的成果。當需要進行某項任務時,這份花名冊可以手把手地提醒我們安全的做法。
  本書是對Martin Fowler的經典權威著作《重構》的重大更新版,並以Ruby為例徹底重寫——並非只是把代碼從Java版中搬過來而已。
  書中給出了一份詳細的重構花名冊,包含超過70條經過錘煉的Ruby重構技術,每一條都有詳細指引、使用細節和範例代碼。其中很多重構技術都用到了Ruby專有的強大特性,你可以從華章網站下載到全部代碼。
  作者借用Fowler最初的想法,展示了如何以一種受控、高效以及迭代的方式進行重構,幫助你有條不紊地改善代碼的質量而不會引入新的bug。不論是編寫還是維護Ruby代碼,本書都將是不可或缺的重要參考。
  本書內容
  理解重構的核心原則,以及進行重構的原因
  發現Ruby代碼中的「壞味道」
  逐步將糟糕的設計轉變成設計精良的代碼
  構建測試以便保證重構正確進行
  理解重構中的難點以及克服的辦法
  編寫正確包裝代碼的方法
  在對象之間移動特性,將其放在最適合的地方
  將數據組織成更容易處理的形式
  簡化條件表達式,更高效地利用多態
  創建更易於理解和使用的接口
  進行大型重構,這將可能影響整個軟件系統數月乃至數年
  成功重構Ruby on Rails代碼

 

作者簡介

 Jay Fields 是DRW Trading公司的一名軟件程序員,也是一位研討會的常客。Jay對發現和成熟化創新式解決方案總是抱有激情。
  Shane Harvie 在美國、印度和澳大利亞等國的敏捷公司中從事軟件開發工作。他現在位於芝加哥的DRW Trading公司工作。
  Martin Fowler 是ThoughtWorks公司的首席科學家,他是一位作家、演說家和諮詢師,經常在軟件開發活動中發表演講。他關注的是企業軟件設計——諸如什麼能產生良好的設計,而良好的設計,而良好的設計有需要哪些實踐等。他是面向對象技術、重構、模式、敏捷方法論、領域建模、統一建模語言(UML)和極限編程的先行者。近十年來他一直在ThoughtWorks公司工作,這是一家非常出色的系統開發赫諮詢公司。

 

目錄

譯者序

前言
致謝
第1章 重構初體驗
1.1 起點
1.1.1 Movie
1.1.2 Rental
1.1.3 Customer
1.1.4 對起始程序的評價
1.2 重構第一步
1.3 Statement方法的分解和再組合
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.10 case語句
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.2 Test∷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.4 instance_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 以II=為例
8.16.4 以instance-variable_defined?為例
8.17 及早初始化的屬性
8.17.1 動機
8.17.2 討論
8.17.3 手法
8.17.4 示例

第9章 簡化條件表達式
9.1 分解條件語句
9.1.1 動機
9.1.2 手法
9.1.3 示例
9.2 重組條件語句
9.2.1 動機
9.2.2 示例:使用「0r」賦值替換=三元操作符
9.2.3 示例:使用顯式返回替換條件語句
9.3 合併條件表達式
9.3.1 動機
9.3.2 手法
9.3.3 示例:Ors
9.3.4 示例:Ands
9.4 合併重複的條件片段
9.4.1 動機
9.4.2 手法
9.4.3 示例
9.5 移除控制位
9.5.1 動機
9.5.2 手法
9.5.3 示例:使用break替換簡單的控制位
9.5.4 示例:返回控制位的結果
9.6 使用守衛子句替換嵌套條件語句
……
第10章 簡化方法調用
第11章 處理通用化
第12章 大型重構
第13章 總結
參考文獻
重構手法列表


我們接受以下的付款方式︰VISA、Mastercard、JCB 信用卡、PayPal、銀行轉帳。