內容大鋼
本書開創性地深入揭示了重構與模式這兩種軟體開發關鍵技術之間的聯繫,說明了通過重構實現模式改善既有的設計,往往優於在新的設計早期使用模式。本書不僅展示了一種應用模式和重構的創新方法,而且有助於讀者透過實戰深入理解重構和模式。書中講述了27種重構方式。
本書適於面向對象軟體開發人員閱讀,也可作為高等學校電腦專業、軟體工程專業師生的參考讀物。
作者介紹
(美)科瑞福斯凱|責編:楊海玲|譯者:楊光//劉基誠
科瑞福斯凱Joshua Kerievsky,極限編程先驅、敏捷項目管理的思想領袖、敏捷eLearning的改革者。軟體開發公司lndustrial Logic的創始人。最具人氣的年輕一代軟體開發專家之一。他擁有二十多年軟體開發經驗,熱衷於培訓敏捷項目團隊,幫助管理者分析和管理技術債務,構建軟體產品。他曾為許多專業雜誌撰稿,並多次在世界級技術會議上擔任講師。除本書外,還參與撰寫了ExtremeProgramming Explored和Extreme ProgrammingPerspectives兩本書。
目錄
第1章 本書的寫作緣由
1.1 過度設計
1.2 模式萬靈丹
1.3 設計不足
1.4 測試驅動開發和持續重構
1.5 重構與模式
1.6 演進式設計
第2章 重構
2.1 何謂重構
2.2 重構的動機
2.3 眾目睽睽
2.4 可讀性好的代碼
2.5 保持清晰
2.6 循序漸進
2.7 設計欠賬
2.8 演變出新的架構
2.9 複合重構與測試驅動的重構
2.10 複合重構的優點
2.11 重構工具
第3章 模式
3.1 何謂模式
3.2 模式痴迷
3.3 實現模式的方式不止一種
3.4 通過重構實現、趨向和去除模式
3.5 模式是否會使代碼更加複雜
3.6 模式知識
3.7 使用模式的預先設計
第4章 代碼壞味
4.1 重複代碼(Duplicated Code)
4.2 過長函數(Long Method)
4.3 條件邏輯太複雜(Conditional Complexity)
4.4 基本類型偏執(Primitive Obsession)
4.5 不恰當的暴露(Indecent Exposure)
4.6 解決方案蔓延(Solution Sprawl)
4.7 異曲同工的類(Alternative Classes with Different Interfaces)
4.8 冗贅類(Lazy Class)
4.9 過大的類(Large Class)
4.10 分支語句(Switch Statement)
4.11 組合爆炸(Combinatorial Explosion)
4.12 怪異解決方案(Oddball Solution)
第5章 模式導向的重構目錄
5.1 重構的格式
5.2 本目錄中引用的項目
5.2.1 XML Builder
5.2.2 HTML Parser
5.2.3 貸款風險計算程序
5.3 起點
5.4 學習順序
第6章 創建
6.1 用Creation Method替換構造函數
6.1.1 動機
6.1.2 做法
6.1.3 示例
6.1.4 變體
6.2 將創建知識搬移到Factory
6.2.1 動機
6.2.2 做法
6.2.3 示例
6.3 用Factory封裝類
6.3.1 動機
6.3.2 做法
6.3.3示例
6.3.4變體
6.4 用 Factory Method引入多態創建
6.4.1 動機
6.4.2 做法
6.4.3 示例
6.5 用Builder封裝Composite
6.5.1 做法
6.5.2 示例
6.5.3 變體
6.6 內聯Singleton
6.6.1 動機
6.6.2 做法
6.6.3 示例
第7章 簡化
7.1 組合方法
7.1.1 動機
7.1.2 做法
7.1.3 示例
7.2 用Strategy替換條件邏輯
7.2.1 動機
7.2.2 做法
7.2.3 示例
7.3 將裝飾功能搬移到Decorator
7.3.1 動機
7.3.2 做法
7.3.3 示例
7.4 用State替換狀態改變條件語句
7.4.1 動機
7.4.2 做法
7.4.3 示例
7.5 用Composite替換隱含樹
7.5.1 動機
7.5.2 做法
7.5.3 示例
7.6 用Command替換條件調度程序
7.6.1 動機
7.6.2 做法
7.6.3 示例
第8章 泛化
8.1 形成Template Method
8.1.1 動機
8.1.2 做法
8.1.3 示例
8.2 提取Composite
8.2.1 動機
8.2.2 做法
8.2.3 示例
8.3 用Composite替換一/多之分
8.3.1 動機
8.3.2 做法
8.3.3 示例
8.4 用Observer替換硬編碼的通知
8.4.1 動機
8.4.2 做法
8.4.3 示例
8.5 通過 Adapter統一介面
8.5.1 動機
8.5.2 做法
8.5.3 示例
8.6 提取 Adapter
8.6.1 動機
8.6.2 做法
8.6.3 示例
8.6.4 變體
8.7 用Interpreter替換隱式語言
8.7.1 動機
8.7.2 做法
8.7.3 示例
第9章 保護
9.1 用類替換類型代碼
9.1.1 動機
9.1.2 做法
9.1.3 示例
9.2 用 Singleton限制實例化
9.2.1 動機
9.2.2 做法
9.2.3 示例
9.3 引入 Null Object
9.3.1 動機
9.3.2 做法
9.3.3 示例
第10章 聚集操作
10.1 將聚集操作搬移到Collecting