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

重構(gòu)的時(shí)機(jī)和方法

重構(gòu)的時(shí)機(jī)和方法

定 價(jià):¥98.00

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

購(gòu)買這本書可以去


ISBN: 9787302632894 出版時(shí)間: 2023-06-01 包裝: 平裝-膠訂
開本: 128開 頁(yè)數(shù): 字?jǐn)?shù):  

內(nèi)容簡(jiǎn)介

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

作者簡(jiǎn)介

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

圖書目錄

目    錄
第Ⅰ部分
通過(guò)重構(gòu)電腦游戲來(lái)學(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  文化:什么時(shí)候重構(gòu) 6
1.3.1  在遺留系統(tǒng)中重構(gòu) 7
1.3.2  什么時(shí)候不應(yīng)該重構(gòu) 8
1.4  工具:如何(安全地)重構(gòu) 8
1.5  入門所需的工具 9
1.5.1  編程語(yǔ)言:TypeScript 9
1.5.2  編輯器:Visual Studio Code 9
1.5.3  版本控制:Git 10
1.6  總體示例:一款2D益智游戲 10
1.7  關(guān)于實(shí)際軟件的說(shuō)明 12
1.8  本章小結(jié) 12
第2章 重構(gòu)的內(nèi)部原理 13
2.1  提高可讀性和可維護(hù)性 13
2.1.1  使代碼更好 13
2.1.2  維護(hù)代碼而不改變代碼作用 15
2.2  獲得速度、靈活性和穩(wěn)定性 16
2.2.1  優(yōu)先選擇組合而非繼承 16
2.2.2  通過(guò)添加而非修改來(lái)更改代碼 17
2.3  重構(gòu)與你的日常工作 18
2.4  在軟件上下文中定義“域” 18
2.5  本章小結(jié) 19
第3章 拆分長(zhǎng)函數(shù) 21
3.1  建立第一條規(guī)則:為什么是5行 22
3.2  引入重構(gòu)模式來(lái)分解函數(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)一個(gè)簡(jiǎn)單的if語(yǔ)句 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)一個(gè)多余的方法 55
4.1.7  重構(gòu)模式:INLINE METHOD 55
4.2  重構(gòu)一個(gè)大的if語(yǔ)句 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ù)問(wèn)題 69
4.3.1  不能用抽象類代替接口嗎 71
4.3.2  規(guī)則:ONLY INHERIT FROM INTERFACES 71
4.3.3  所有這些代碼重復(fù)是怎么回事 72
4.4  重構(gòu)一對(duì)復(fù)雜的if語(yǔ)句 73
4.5  刪除無(wú)用代碼 76
4.6  本章小結(jié) 77
第5章 將類似的代碼融合在一起 79
5.1  統(tǒng)一相似的類 80
5.2  統(tǒng)一簡(jiǎn)單條件 93
5.3  統(tǒng)一復(fù)雜條件 96
5.3.1  對(duì)條件使用算術(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  引入U(xiǎn)ML類圖描繪類關(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章 保護(hù)數(shù)據(jù) 127
6.1  無(wú)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  封裝簡(jiǎn)單數(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  通過(guò)私有構(gòu)造函數(shù)進(jìn)行枚舉 155
6.5.2  將數(shù)字重新映射到類 157
6.6  本章小結(jié) 159
第Ⅱ部分 學(xué)以致用
第7章 與編譯器協(xié)作 163
7.1  了解編譯器 163
7.1.1  缺點(diǎn):停機(jī)問(wèn)題限制了編譯時(shí)知識(shí) 164
7.1.2  優(yōu)點(diǎn):可達(dá)性確保方法返回 164
7.1.3  優(yōu)點(diǎn):明確賦值防止訪問(wèn)未初始化的變量 165
7.1.4  優(yōu)點(diǎn):訪問(wèn)控制有助于封裝數(shù)據(jù) 166
7.1.5  優(yōu)點(diǎn):類型檢查證明屬性 166
7.1.6  缺點(diǎn):取消引用null會(huì)使應(yīng)用程序崩潰 167
7.1.7  缺點(diǎn):算術(shù)錯(cuò)誤導(dǎo)致溢出或崩潰 167
7.1.8  缺點(diǎn):越界錯(cuò)誤使應(yīng)用程序崩潰 168
7.1.9  缺點(diǎn):無(wú)限循環(huán)使應(yīng)用程序停滯 168
7.1.10  缺點(diǎn):死鎖和競(jìng)爭(zhēng)條件導(dǎo)致意外行為 169
7.2  使用編譯器 170
7.2.1  使編譯器運(yùn)行 171
7.2.2  不要對(duì)抗編譯器 173
7.3  信任編譯器 178
7.3.1  教編譯器不變量 178
7.3.2  注意警告 180
7.4  完全信任編譯器 180
7.5  本章小結(jié) 181
第8章 遠(yuǎn)離注釋 183
8.1  刪除過(guò)時(shí)的注釋 184
8.2  刪除注釋掉的代碼 185
8.3  刪除不重要的注釋 186
8.4  將注釋轉(zhuǎn)換為方法名稱 186
8.5  保留記錄不變量的注釋 187
8.6  本章小結(jié) 188
第9章 喜歡刪除代碼 189
9.1  刪除代碼可能是下一個(gè)前沿 190
9.2  刪除代碼以消除偶然復(fù)雜性 190
9.2.1  缺乏經(jīng)驗(yàn)導(dǎo)致的技術(shù)無(wú)知 191
9.2.2  時(shí)間壓力造成的技術(shù)浪費(fèi) 192
9.2.3  環(huán)境造成的技術(shù)債務(wù) 192
9.2.4  增長(zhǎng)帶來(lái)的技術(shù)拖累 192
9.3  根據(jù)親密程度對(duì)代碼進(jìn)行分類 193
9.4  刪除遺留系統(tǒng)中的代碼 194
9.4.1  使用絞殺者模式進(jìn)行了解 194
9.4.2  使用絞殺者模式改進(jìn)代碼 196
9.5  從凍結(jié)項(xiàng)目中刪除代碼 196
9.5.1  將期望的結(jié)果設(shè)為默認(rèn) 197
9.5.2  通過(guò)“探針并穩(wěn)定”模式最大
限度減少浪費(fèi) 197
9.6  在版本控制中刪除分支 198
9.7  刪除代碼文檔 199
9.8  刪除測(cè)試代碼 200
9.8.1  刪除樂(lè)觀測(cè)試 200
9.8.2  刪除悲觀測(cè)試 200
9.8.3  修復(fù)或刪除不穩(wěn)定測(cè)試 201
9.8.4  重構(gòu)代碼以消除復(fù)雜的測(cè)試 201
9.8.5  專門化測(cè)試以加快速度 201
9.9  刪除配置代碼 202
9.10  刪除代碼以消除庫(kù) 203
9.11  從工作功能中刪除代碼 205
9.12  本章小結(jié) 206
第10章  永遠(yuǎn)不要害怕添加代碼 207
10.1  接受不確定性:進(jìn)入危險(xiǎn) 207
10.2  使用探針實(shí)驗(yàn)克服對(duì)構(gòu)建錯(cuò)誤事物的恐懼 208
10.3  以固定比例克服對(duì)浪費(fèi)或風(fēng)險(xiǎn)的恐懼 209
10.4  通過(guò)逐步改進(jìn)克服對(duì)不完美的恐懼 210
10.5  復(fù)制和粘貼效果如何改變速度 211
10.6  通過(guò)可擴(kuò)展性進(jìn)行添加修改 211
10.7  通過(guò)添加修改可實(shí)現(xiàn)向后兼容 212
10.8  通過(guò)功能切換進(jìn)行添加修改 213
10.9  通過(guò)抽象分支進(jìn)行添加修改 216
10.10  本章小結(jié) 218
第11章  遵循代碼中的結(jié)構(gòu) 221
11.1  根據(jù)范圍和來(lái)源分類結(jié)構(gòu) 221
11.2  代碼反映行為的3種
方式 222
11.2.1  在控制流中表達(dá)行為 223
11.2.2  在數(shù)據(jù)結(jié)構(gòu)中表達(dá)行為 224
11.2.3  在數(shù)據(jù)中表達(dá)行為 227
11.3  添加代碼以暴露結(jié)構(gòu) 229
11.4  觀察而不是預(yù)測(cè)且使用經(jīng)驗(yàn)技術(shù) 229
11.5  在不理解代碼的情況下獲得安全性 230
11.5.1  通過(guò)測(cè)試獲得安全性 230
11.5.2  通過(guò)掌握獲得安全性 230
11.5.3  通過(guò)工具輔助獲得安全性 230
11.5.4  通過(guò)正式驗(yàn)證獲得安全性 231
11.5.5  通過(guò)容錯(cuò)獲得安全性 231
11.6  識(shí)別未利用的結(jié)構(gòu) 231
11.6.1  通過(guò)提取和封裝來(lái)利用空白 231
11.6.2  通過(guò)統(tǒng)一來(lái)利用重復(fù) 233
11.6.3  通過(guò)封裝來(lái)利用共同詞綴 235
11.6.4  通過(guò)動(dòng)態(tài)調(diào)度來(lái)利用運(yùn)行時(shí)類型 236
11.7  本章小結(jié) 237
第12章  避免優(yōu)化和通用性 239
12.1  力求簡(jiǎn)單 240
12.2  何時(shí)以及如何通用 241
12.2.1  最小化構(gòu)建以避免通用性 242
12.2.2  統(tǒng)一穩(wěn)定性相似的事物 242
12.2.3  消除不必要的通用性 242
12.3  何時(shí)以及如何優(yōu)化 243
12.3.1  優(yōu)化前重構(gòu) 243
12.3.2  根據(jù)約束理論進(jìn)行優(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章  讓壞代碼看起來(lái)很糟糕 253
13.1  用壞代碼表明過(guò)程問(wèn)題 253
13.2  分成原始代碼和遺留代碼 254
13.3  定義壞代碼的方法 255
13.3.1  本書中的規(guī)則:簡(jiǎn)單而具體 255
13.3.2  代碼異味:完整而抽象 256
13.3.3  圈復(fù)雜度:算法(客觀) 256
13.3.4  認(rèn)知復(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ù)命名對(duì)事物進(jìn)行分組 261
13.5.7  為名稱添加上下文 262
13.5.8  創(chuàng)建長(zhǎng)方法 262
13.5.9  給方法多個(gè)形參 263
13.5.10  使用getter和setter 264
13.6  本章小結(jié) 265
第14章  收尾工作 267
14.1  回顧本書的旅程 267
14.1.1  第I部分:動(dòng)機(jī)和具體化 267
14.1.2  第Ⅱ部分:拓寬視野 268
14.2  探索基本原則 268
14.2.1  尋找更小的步驟 268
14.2.2  尋找底層結(jié)構(gòu) 269
14.2.3  使用規(guī)則進(jìn)行協(xié)作 269
14.2.4  團(tuán)隊(duì)優(yōu)先于個(gè)人 269
14.2.5  簡(jiǎn)單性優(yōu)先于正確性 270
14.2.6  使用對(duì)象或高階函數(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) m.ranfinancial.com 2005-2020, All Rights Reserved.
鄂ICP備15019699號(hào) 鄂公網(wǎng)安備 42010302001612號(hào)