最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會員登陸 & 注冊

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

2023-07-23 10:33 作者:取個名字吧一個就好  | 我要投稿

鏈接:https://pan.baidu.com/s/1ab8z7OMoaCNl21jcccAIdw?pwd=a363?

提取碼:a363

每個代碼庫都包含一些錯誤和低效之處,你需要將其找出并完成修正。以正確的方式進行重構(gòu),代碼就會變得優(yōu)雅、易讀和易維護。在本書中,你將學習一種獨特的重構(gòu)方式,可以在5行或更少的代碼中實現(xiàn)任何方法。你還會發(fā)現(xiàn)大多數(shù)資深開發(fā)人員都知道的一個秘密::有時敲定代碼并在稍后進行修復會更快。

對所有技術(shù)水平的開發(fā)人員來說,本書是以全新視角審視重構(gòu)。在本書中,你將掌握作者的創(chuàng)新方法,學習一些具體的規(guī)則,將任何方法簡化為5行或更少。你將了解重構(gòu)的時機、適用于大多數(shù)常見問題的特定重構(gòu)模式,以及應該完全刪除的代碼特征。

● 壞代碼的標志

● 在甚至不理解代碼的情況下安全地改進它

● 平衡優(yōu)化和代碼通用性

● 正確的編譯器實踐


作者簡介

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

目錄

第Ⅰ部分

通過重構(gòu)電腦游戲來學習

第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 什么時候不應該重構(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 關于實際軟件的說明 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 應用規(guī)則 33

3.4 好的函數(shù)名稱的屬性 33

3.5 分解任務太多的函數(shù) 36

3.5.1 規(guī)則:IF ONLY AT THE START 36

3.5.2 應用規(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 應用規(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 解決代碼重復問題 69

4.3.1 不能用抽象類代替接口嗎 71

4.3.2 規(guī)則:ONLY INHERIT FROM INTERFACES 71

4.3.3 所有這些代碼重復是怎么回事 72

4.4 重構(gòu)一對復雜的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)一復雜條件 96

5.3.1 對條件使用算術(shù)規(guī)則 97

5.3.2 規(guī)則:USE PURE CONDITIONS 98

5.3.3 應用條件算術(shù) 100

5.4 跨類統(tǒng)一代碼 101

5.4.1 引入UML類圖描繪類關系 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 應用規(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 應用規(guī)則 138

6.2.3 重構(gòu)模式:ENCAPSULATE DATA 143

6.3 封裝復雜數(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

第Ⅱ部分 學以致用

第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會使應用程序崩潰 167

7.1.7 缺點:算術(shù)錯誤導致溢出或崩潰 167

7.1.8 缺點:越界錯誤使應用程序崩潰 168

7.1.9 缺點:無限循環(huán)使應用程序停滯 168

7.1.10 缺點:死鎖和競爭條件導致意外行為 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 刪除代碼以消除偶然復雜性 190

9.2.1 缺乏經(jīng)驗導致的技術(shù)無知 191

9.2.2 時間壓力造成的技術(shù)浪費 192

9.2.3 環(huán)境造成的技術(shù)債務 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é)果設為默認 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 修復或刪除不穩(wěn)定測試 201

9.8.4 重構(gòu)代碼以消除復雜的測試 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 以固定比例克服對浪費或風險的恐懼 209

10.4 通過逐步改進克服對不完美的恐懼 210

10.5 復制和粘貼效果如何改變速度 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 觀察而不是預測且使用經(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)一來利用重復 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 使用指標指導優(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

查看全部↓

前言/序言

在我很小的時候,父親就教我編程,因此自記事起我就一直在思考結(jié)構(gòu)。我總是以幫助他人為動力;這就是我生命的意義。因此,教學很自然地吸引著我。當我在大學有機會獲得助教職位時,我就立即接受了。

出于創(chuàng)業(yè)精神,我決定創(chuàng)辦一個學生組織,它有助于學生互相輔導。這個組織歡迎任何人參加或發(fā)言,且主題范圍廣泛,包括從輔修課程中學到的知識到課程未包含的高級主題。我相信這樣我就有機會講授知識。但事實證明,計算機科學工作者都很羞怯,因此我不得不連續(xù)主持近60周才讓組織運作起來。在此期間,我學到了很多,不僅有關我所教的課題,還包括有關教學方面的知識。這些討論也吸引了一群求知欲很強的人,使我遇到了我最好的朋友。

大學畢業(yè)后的一段時間內(nèi),我和一位朋友一起出去玩。我們很無聊,朋友就問我是否可以即興演講,因為我已經(jīng)做了很多這樣的演講。我回答說“讓我試試” 。我們打開了一臺筆記本計算機,一鼓作氣輸入了本書第Ⅰ部分的總體示例。

當我的手指離開鍵盤時,朋友十分震驚。他認為那是演示文檔,但我有不同的想法:我想教他重構(gòu)。


重構(gòu)的時機和方法的評論 (共 條)

分享到微博請遵守國家法律
门源| 巫溪县| 台中县| 梁山县| 平乡县| 金沙县| 六枝特区| 彭州市| 康定县| 东台市| 南丹县| 临武县| 信丰县| 株洲县| 开化县| 贞丰县| 德钦县| 肥乡县| 安塞县| 文化| 旌德县| 盐山县| 承德市| 奉化市| 双峰县| 罗甸县| 芜湖市| 尼勒克县| 大荔县| 溧水县| 连云港市| 宁南县| 冷水江市| 灌云县| 延寿县| 化德县| 广丰县| 桦甸市| 西平县| 鸡西市| 绥棱县|