注冊 | 登錄讀書好,好讀書,讀好書!
讀書網(wǎng)-DuShu.com
當(dāng)前位置: 首頁出版圖書科學(xué)技術(shù)計算機/網(wǎng)絡(luò)計算機科學(xué)理論與基礎(chǔ)知識重構(gòu)的時機和方法

重構(gòu)的時機和方法

重構(gòu)的時機和方法

定 價:¥98.00

作 者: [法] 克里斯蒂安·克勞森(Christian Clausen)著,郭濤 譯
出版社: 清華大學(xué)出版社
叢編項:
標(biāo) 簽: 暫缺

ISBN: 9787302632894 出版時間: 2023-06-01 包裝: 平裝-膠訂
開本: 128開 頁數(shù): 字數(shù):  

內(nèi)容簡介

  每個代碼庫都包含一些錯誤和低效之處,你需要將其找出并完成修正。以正確的方式進行重構(gòu),代碼就會變得優(yōu)雅、易讀和易維護。在本書中,你將學(xué)習(xí)一種獨特的重構(gòu)方式,可以在5行或更少的代碼中實現(xiàn)任何方法。你還會發(fā)現(xiàn)大多數(shù)資深開發(fā)人員都知道的一個秘密::有時敲定代碼并在稍后進行修復(fù)會更快。 對所有技術(shù)水平的開發(fā)人員來說,本書是以全新視角審視重構(gòu)。在本書中,你將掌握作者的創(chuàng)新方法,學(xué)習(xí)一些具體的規(guī)則,將任何方法簡化為5行或更少。你將了解重構(gòu)的時機、適用于大多數(shù)常見問題的特定重構(gòu)模式,以及應(yīng)該完全刪除的代碼特征。 ● 壞代碼的標(biāo)志 ● 在甚至不理解代碼的情況下安全地改進它 ● 平衡優(yōu)化和代碼通用性 ● 正確的編譯器實踐

作者簡介

  Christian Clausen是一名技術(shù)敏捷教練,主要教團隊如何重構(gòu)代碼。

圖書目錄

目    錄
第Ⅰ部分
通過重構(gòu)電腦游戲來學(xué)習(xí)
第1章 重構(gòu) 3
1.1  什么是重構(gòu) 4
1.2  技能:重構(gòu)什么 5
1.2.1  代碼異味示例 5
1.2.2  規(guī)則示例 6
1.3  文化:什么時候重構(gòu) 6
1.3.1  在遺留系統(tǒng)中重構(gòu) 7
1.3.2  什么時候不應(yīng)該重構(gòu) 8
1.4  工具:如何(安全地)重構(gòu) 8
1.5  入門所需的工具 9
1.5.1  編程語言:TypeScript 9
1.5.2  編輯器:Visual Studio Code 9
1.5.3  版本控制:Git 10
1.6  總體示例:一款2D益智游戲 10
1.7  關(guān)于實際軟件的說明 12
1.8  本章小結(jié) 12
第2章 重構(gòu)的內(nèi)部原理 13
2.1  提高可讀性和可維護性 13
2.1.1  使代碼更好 13
2.1.2  維護代碼而不改變代碼作用 15
2.2  獲得速度、靈活性和穩(wěn)定性 16
2.2.1  優(yōu)先選擇組合而非繼承 16
2.2.2  通過添加而非修改來更改代碼 17
2.3  重構(gòu)與你的日常工作 18
2.4  在軟件上下文中定義“域” 18
2.5  本章小結(jié) 19
第3章 拆分長函數(shù) 21
3.1  建立第一條規(guī)則:為什么是5行 22
3.2  引入重構(gòu)模式來分解函數(shù) 24
3.3  分解函數(shù)以平衡抽象 32
3.3.1  規(guī)則:EITHER CALL OR PASS 32
3.3.2  應(yīng)用規(guī)則 33
3.4  好的函數(shù)名稱的屬性 33
3.5  分解任務(wù)太多的函數(shù) 36
3.5.1  規(guī)則:IF ONLY AT THE START 36
3.5.2  應(yīng)用規(guī)則 37
3.6  本章小結(jié) 39
第4章 讓類型代碼發(fā)揮作用 41
4.1  重構(gòu)一個簡單的if語句 41
4.1.1  規(guī)則:NEVER USE IF WITH ELSE 42
4.1.2  應(yīng)用規(guī)則 43
4.1.3  重構(gòu)模式:REPLACE TYPE CODE WITH CLASSES 45
4.1.4  將代碼推入類 48
4.1.5  重構(gòu)模式:PUSH CODE 
INTO CLASSES 51
4.1.6  內(nèi)聯(lián)一個多余的方法 55
4.1.7  重構(gòu)模式:INLINE METHOD 55
4.2  重構(gòu)一個大的if語句 57
4.2.1  去除泛化 61
4.2.2  重構(gòu)模式:SPECIALIZE METHOD 63
4.2.3  唯一允許的switch 65
4.2.4  規(guī)則:NEVER USE SWITCH 66
4.2.5  消除if 67
4.3  解決代碼重復(fù)問題 69
4.3.1  不能用抽象類代替接口嗎 71
4.3.2  規(guī)則:ONLY INHERIT FROM INTERFACES 71
4.3.3  所有這些代碼重復(fù)是怎么回事 72
4.4  重構(gòu)一對復(fù)雜的if語句 73
4.5  刪除無用代碼 76
4.6  本章小結(jié) 77
第5章 將類似的代碼融合在一起 79
5.1  統(tǒng)一相似的類 80
5.2  統(tǒng)一簡單條件 93
5.3  統(tǒng)一復(fù)雜條件 96
5.3.1  對條件使用算術(shù)規(guī)則 97
5.3.2  規(guī)則:USE PURE CONDITIONS 98
5.3.3  應(yīng)用條件算術(shù) 100
5.4  跨類統(tǒng)一代碼 101
5.4.1  引入UML類圖描繪類關(guān)系 106
5.4.2  重構(gòu)模式:INTRODUCE STRATEGY PATTERN 108
5.4.3  規(guī)則:NO INTERFACE WITH ONLY ONE IMPLEMENTATION 114
5.4.4  重構(gòu)模式:EXTRACT INTERFACE FROM 
IMPLEMENTATION 115
5.5  統(tǒng)一類似函數(shù) 118
5.6  統(tǒng)一類似代碼 121
5.7  本章小結(jié) 125
第6章 保護數(shù)據(jù) 127
6.1  無getter封裝 127
6.1.1  規(guī)則:DO NOT USE GETTERS OR SETTERS 127
6.1.2  應(yīng)用規(guī)則 129
6.1.3  重構(gòu)模式:ELIMINATE GETTER OR SETTER 131
6.1.4  消除最后的getter 133
6.2  封裝簡單數(shù)據(jù) 136
6.2.1  規(guī)則:NEVER HAVE COMMON AFFIXES 136
6.2.2  應(yīng)用規(guī)則 138
6.2.3  重構(gòu)模式:ENCAPSULATE DATA 143
6.3  封裝復(fù)雜數(shù)據(jù) 145
6.4  消除序列不變量 152
6.5  以另一種方式消除枚舉 155
6.5.1  通過私有構(gòu)造函數(shù)進行枚舉 155
6.5.2  將數(shù)字重新映射到類 157
6.6  本章小結(jié) 159
第Ⅱ部分 學(xué)以致用
第7章 與編譯器協(xié)作 163
7.1  了解編譯器 163
7.1.1  缺點:停機問題限制了編譯時知識 164
7.1.2  優(yōu)點:可達性確保方法返回 164
7.1.3  優(yōu)點:明確賦值防止訪問未初始化的變量 165
7.1.4  優(yōu)點:訪問控制有助于封裝數(shù)據(jù) 166
7.1.5  優(yōu)點:類型檢查證明屬性 166
7.1.6  缺點:取消引用null會使應(yīng)用程序崩潰 167
7.1.7  缺點:算術(shù)錯誤導(dǎo)致溢出或崩潰 167
7.1.8  缺點:越界錯誤使應(yīng)用程序崩潰 168
7.1.9  缺點:無限循環(huán)使應(yīng)用程序停滯 168
7.1.10  缺點:死鎖和競爭條件導(dǎo)致意外行為 169
7.2  使用編譯器 170
7.2.1  使編譯器運行 171
7.2.2  不要對抗編譯器 173
7.3  信任編譯器 178
7.3.1  教編譯器不變量 178
7.3.2  注意警告 180
7.4  完全信任編譯器 180
7.5  本章小結(jié) 181
第8章 遠離注釋 183
8.1  刪除過時的注釋 184
8.2  刪除注釋掉的代碼 185
8.3  刪除不重要的注釋 186
8.4  將注釋轉(zhuǎn)換為方法名稱 186
8.5  保留記錄不變量的注釋 187
8.6  本章小結(jié) 188
第9章 喜歡刪除代碼 189
9.1  刪除代碼可能是下一個前沿 190
9.2  刪除代碼以消除偶然復(fù)雜性 190
9.2.1  缺乏經(jīng)驗導(dǎo)致的技術(shù)無知 191
9.2.2  時間壓力造成的技術(shù)浪費 192
9.2.3  環(huán)境造成的技術(shù)債務(wù) 192
9.2.4  增長帶來的技術(shù)拖累 192
9.3  根據(jù)親密程度對代碼進行分類 193
9.4  刪除遺留系統(tǒng)中的代碼 194
9.4.1  使用絞殺者模式進行了解 194
9.4.2  使用絞殺者模式改進代碼 196
9.5  從凍結(jié)項目中刪除代碼 196
9.5.1  將期望的結(jié)果設(shè)為默認 197
9.5.2  通過“探針并穩(wěn)定”模式最大
限度減少浪費 197
9.6  在版本控制中刪除分支 198
9.7  刪除代碼文檔 199
9.8  刪除測試代碼 200
9.8.1  刪除樂觀測試 200
9.8.2  刪除悲觀測試 200
9.8.3  修復(fù)或刪除不穩(wěn)定測試 201
9.8.4  重構(gòu)代碼以消除復(fù)雜的測試 201
9.8.5  專門化測試以加快速度 201
9.9  刪除配置代碼 202
9.10  刪除代碼以消除庫 203
9.11  從工作功能中刪除代碼 205
9.12  本章小結(jié) 206
第10章  永遠不要害怕添加代碼 207
10.1  接受不確定性:進入危險 207
10.2  使用探針實驗克服對構(gòu)建錯誤事物的恐懼 208
10.3  以固定比例克服對浪費或風(fēng)險的恐懼 209
10.4  通過逐步改進克服對不完美的恐懼 210
10.5  復(fù)制和粘貼效果如何改變速度 211
10.6  通過可擴展性進行添加修改 211
10.7  通過添加修改可實現(xiàn)向后兼容 212
10.8  通過功能切換進行添加修改 213
10.9  通過抽象分支進行添加修改 216
10.10  本章小結(jié) 218
第11章  遵循代碼中的結(jié)構(gòu) 221
11.1  根據(jù)范圍和來源分類結(jié)構(gòu) 221
11.2  代碼反映行為的3種
方式 222
11.2.1  在控制流中表達行為 223
11.2.2  在數(shù)據(jù)結(jié)構(gòu)中表達行為 224
11.2.3  在數(shù)據(jù)中表達行為 227
11.3  添加代碼以暴露結(jié)構(gòu) 229
11.4  觀察而不是預(yù)測且使用經(jīng)驗技術(shù) 229
11.5  在不理解代碼的情況下獲得安全性 230
11.5.1  通過測試獲得安全性 230
11.5.2  通過掌握獲得安全性 230
11.5.3  通過工具輔助獲得安全性 230
11.5.4  通過正式驗證獲得安全性 231
11.5.5  通過容錯獲得安全性 231
11.6  識別未利用的結(jié)構(gòu) 231
11.6.1  通過提取和封裝來利用空白 231
11.6.2  通過統(tǒng)一來利用重復(fù) 233
11.6.3  通過封裝來利用共同詞綴 235
11.6.4  通過動態(tài)調(diào)度來利用運行時類型 236
11.7  本章小結(jié) 237
第12章  避免優(yōu)化和通用性 239
12.1  力求簡單 240
12.2  何時以及如何通用 241
12.2.1  最小化構(gòu)建以避免通用性 242
12.2.2  統(tǒng)一穩(wěn)定性相似的事物 242
12.2.3  消除不必要的通用性 242
12.3  何時以及如何優(yōu)化 243
12.3.1  優(yōu)化前重構(gòu) 243
12.3.2  根據(jù)約束理論進行優(yōu)化 245
12.3.3  使用指標(biāo)指導(dǎo)優(yōu)化 247
12.3.4  選擇好的算法和數(shù)據(jù)結(jié)構(gòu) 248
12.3.5  使用緩存 249
12.3.6  隔離優(yōu)化代碼 250
12.4  本章小結(jié) 251
第13章  讓壞代碼看起來很糟糕 253
13.1  用壞代碼表明過程問題 253
13.2  分成原始代碼和遺留代碼 254
13.3  定義壞代碼的方法 255
13.3.1  本書中的規(guī)則:簡單而具體 255
13.3.2  代碼異味:完整而抽象 256
13.3.3  圈復(fù)雜度:算法(客觀) 256
13.3.4  認知復(fù)雜度:算法(主觀) 257
13.4  用于安全破壞代碼的規(guī)則 257
13.5  安全破壞代碼的方法 258
13.5.1  使用枚舉 258
13.5.2  使用整數(shù)和字符串作為類型代碼 259
13.5.3  在代碼中放入魔術(shù)數(shù)字 259
13.5.4  在代碼中添加注釋 260
13.5.5  在代碼中添加空白 261
13.5.6  根據(jù)命名對事物進行分組 261
13.5.7  為名稱添加上下文 262
13.5.8  創(chuàng)建長方法 262
13.5.9  給方法多個形參 263
13.5.10  使用getter和setter 264
13.6  本章小結(jié) 265
第14章  收尾工作 267
14.1  回顧本書的旅程 267
14.1.1  第I部分:動機和具體化 267
14.1.2  第Ⅱ部分:拓寬視野 268
14.2  探索基本原則 268
14.2.1  尋找更小的步驟 268
14.2.2  尋找底層結(jié)構(gòu) 269
14.2.3  使用規(guī)則進行協(xié)作 269
14.2.4  團隊優(yōu)先于個人 269
14.2.5  簡單性優(yōu)先于正確性 270
14.2.6  使用對象或高階函數(shù) 270
14.3  后續(xù)方向 271
14.3.1  微架構(gòu)路線 271
14.3.2  宏架構(gòu)路線 272
14.3.3  軟件質(zhì)量路線 272
14.4  本章小結(jié) 272
附錄  為第Ⅰ部分安裝工具 275
 
 

本目錄推薦

掃描二維碼
Copyright ? 讀書網(wǎng) hotzeplotz.com 2005-2020, All Rights Reserved.
鄂ICP備15019699號 鄂公網(wǎng)安備 42010302001612號