代碼重構(Visual Basic版)

代碼重構(Visual Basic版)

《代碼重構(Visual Basic版)》是2009年清華大學出版社出版的圖書。

圖書簡介

在這本獨一無二的書中,本書作者向您介紹如何利用重構改進現有代碼的設計,使之變得更有效和更具生產力。它提供了實用方法,所以您可以快速學會如何使用重構工具和功能來管理和修改代碼。本書還介紹了如何進行單元測試、重構模式和重構升級原有的Visual Basic 代碼。  

在學習本書的過程中,將從頭開始構建原型應用程式。然後,利用重構技術將代碼轉換為正確設計的、企業級的應用程式。本書作者將手把手地教您每個過程,同時提供了專家級的編碼技巧。然後,可以將這些信息套用到由於公司擴張、策略改變或類似業務決策所引起的實際情形中。  

目錄

第Ⅰ部分重構的介紹

第1章重構的全面介紹 3

1.1重構的快速瀏覽 3

1.1.1重構過程 4

1.1.2軟體行業現狀概述 5

1.2重構過程的詳細介紹 7

1.2.1代碼味道的使用 7

1.2.2代碼的轉換 7

1.2.3重構的優點 9

1.2.4澄清一些常見的誤解 11

1.3VisualBasic和重構 13

1.3.1VisualBasic的發展史

和遺留問題 13

1.3.2VisualBasic的演變 14

1.3.3通過重構處理遺留的問題 15

1.4小結 16

第2章重構的初體驗 17

2.1CaloriesCalculator樣本

應用程式 17

2.1.1CaloriesCalculator

應用程式 18

2.1.2需求的增長:計算

理想的體重 20

2.1.3需求的增長:保存病人

的數據 22

2.2運用中的重構 23

2.2.1將BtnCalculate_Click

方法分解 24

2.2.2發現新的類 27

2.2.3限制Patient類的接口 30

2.2.4將條件邏輯放到

Patient類中 32

2.2.5創建Patient類的層次結構 35

2.3保存功能的實現 41

2.3.1保存數據 41

2.3.2實現顯示病人歷史

信息的功能 49

2.4CaloriesCalculator

重構過的版本 53

2.5小結 55

第3章組建重構的工具箱 57

3.1使用自動化的重構工具 58

3.1.1JetBrains提供的ReSharper 58

3.1.2WholeTomato提供的

VisualAssistX 59

3.1.3DeveloperExpress

提供的Refactor!Pro 59

3.1.4從Refactor!開始入手 59

3.1.5進一步探討VB用戶

界面的Refactor! 61

3.1.6快速瀏覽:可供

使用的重構 65

3.2單元測試的基本內容:

測試的護具 66

3.2.1單元測試架構的出現 67

3.2.2NUnit的初體驗 69

3.2.3NUnit的安裝 69

3.2.4第一個測試的實現 71  

3.2.5測試驅動的方法 78

3.2.6需要考慮的其他測試工具 79

3.3關於版本控制的一些問題 81

3.4小結 81

第4章Rent-a-Wheels套用

程式的原型 83

4.1會見客戶 84

4.1.1會見經理 84

4.1.2會見前台接待員 85

4.1.3會見停車場的服務人員 85

4.1.4會見維護人員 86

4.2採取Rent-a-Wheels項目

中最初的步驟 86

4.2.1參與者和用例 86

4.2.2汽車的狀態 88

4.2.3首次擬定主要的套用

程式視窗 90

4.2.4Rent-a-Wheels開發

團隊的會議 90

4.3讓原型運轉 91

4.3.1檢查資料庫模型 91

4.3.2檢查VisualBasic的代碼 93

4.4快速而高效的VB編程方法 96

4.4.1資料庫驅動的設計 97

4.4.2基於GUI的應用程式 97

4.4.3事件驅動的編程 97

4.4.4快速應用程式開發(RAD) 98

4.4.5複製/貼上作為代碼

重用的機制 98

4.5通過重構過程從原型

進入到交付 99

4.6小結 99

第Ⅱ部分VB重構的初步知識

第5章Chameleon語言:從靜態

弱類型化到動態強類型化 103

5.1OptionExplicit和

OptionStrict的.NET影響 104

5.2在不嚴格的代碼中設定

OptionExplicitOn 105

5.2.1理解SetOption

ExplicitOn重構 105

5.2.2將Rent-a-Wheels代碼

重構成顯式的形式 108

5.3在不嚴格的代碼中設定

OptionStrictOn 109

5.3.1一個有點人為的隨意的

VB代碼示例 109

5.3.2通過新變數的定義來

解決變數的複雜用法 112

5.3.3推斷變數的類型 115

5.3.4通過類型轉換函式將

所有內容整合在一起 118

5.3.5方法、欄位、屬性和

其他成員的處理 120

5.3.6將SetOptionStrictOn

重構運用到Rent-a-Wheels

應用程式中 125

5.4靜態類型化對動態類型化

及其與VisualBasic的關係 127

5.4.1VisualBasic6及其之前

版本中的後期綁定 128

5.4.2鴨子類型化 129

5.4.3在檔案層次上重設動態

行為或靜態行為 130

5.4.4為動態代碼提供一個

靜態類型化的封裝器 131

5.5激活顯式而嚴格的

編譯器選項 133

5.5.1在ProjectProperties

視窗中設定選項 134

5.5.2更改VisualBasic編譯器

的默認行為 135

5.5.3在源檔案中設定選項 135

5.5.4使用項模板來設定選項 136

5.6小結 137

第6章錯誤處理:以一些簡單的

步驟從傳統風格步入到

結構化風格 139

6.1傳統的錯誤處理和結構化

的錯誤處理 140

6.1.1傳統的(非結構化的)

錯誤處理 140

6.1.2結構化的錯誤處理 142  

6.2結構化錯誤處理的好處 145

6.2.1結構化的代碼和

非結構化的代碼 145

6.2.2作為類型而不是數字

出現的異常 145

6.2.3錯誤過濾 146

6.2.4Finally代碼塊 146

6.2.5.NET的互操作性 147

6.3用Try-Catch-Finally取代

OnError構造 147

6.3.1理解關鍵字When 149

6.3.2用Try-Catch-Finally替換

OnError的重構步驟 150

6.3.3用Try-Catch-Finally構造

替換OnErrorGoto標籤 151

6.3.4用Try-Catch-Finally構造替

換OnErrorResumeNext 154

6.4用異常類型替換錯誤代碼 155

6.4.1用異常類型替換系統

錯誤代碼 158

6.4.2用異常類型來替換

自定義的錯誤代碼 159

6.5Rent-a-Wheels應用程式

中的錯誤處理 160

6.6小結 162

第7章基本的代碼衛生:消除無

用代碼、降低作用域、使

用顯式導入以及刪除不用

的引用 165

7.1刪除無用代碼 166

7.1.1無用代碼的類型 167

7.1.2無用代碼常見的來源 168

7.2降低過度曝光的元素的

作用域和訪問級別 171

7.2.1作用域和訪問級別 173

7.2.2過度曝光常見的來源 174

7.2.3處理過度曝光的問題 178

7.3使用顯式導入 179

7.4刪除未使用的程式集引用 183

7.5Rent-a-Wheels應用程式

中的基本衛生 184

7.6小結 185

第Ⅲ部分標準重構轉換的

初步介紹

第8章從問題域到代碼:消除差距 189

8.1理解問題域 190

8.1.1第1步:收集信息 190

8.1.2第2步:就辭彙表達成

一致意見 191

8.1.3第3步:描述互動作用 192

8.1.4第4步:建立原型 193

8.2命名的指導原則 193

8.2.1大寫風格 194

8.2.2簡單的命名指導原則 195

8.2.3順暢地傳遞信息:選擇

正確的單詞 196

8.2.4Rename重構 197

8.3發布接口和公有接口 200

8.3.1自包含的應用程式與

可重用的模組 200

8.3.2修改公有接口 203

8.3.3Refactor!中的SafeRename

重構 206

8.4Rent-a-Wheels應用程式中

的Rename和SafeRename

重構 208  

8.5小結 209

第9章對重複代碼進行方法提取 211

9.1保持封裝代碼和隱藏

細節的原因 211

9.2信息和實現的隱藏 212

9.3分解方法 214

9.3.1周長計算——長方法的

一個示例 215

9.3.2提取周長計算的代碼 217

9.3.3提取計算半徑的代碼 220

9.3.4提取WaitforUsertoClose

代碼 220

9.3.5提取讀取坐標的代碼 220

9.3.6Refactor!中的Extract

Method重構 223

9.4重複代碼的味道 225

9.4.1重複代碼的來源 226

9.4.2複製/貼上編程 227

9.5幻數 228

9.6Rent-a-Wheels應用程式中的

ExtractMethod和

ReplaceMagicLiteral重構 230

9.7小結 231

第10章方法合併與方法

提取的技術 233

10.1臨時變數的處理 233

10.1.1MoveDeclarationNear

Reference重構 234

10.1.2MoveInitializationto

Declaration重構 237

10.1.3SplitTemporaryVariable

重構 238

10.1.4InlineTemp重構 242

10.1.5ReplaceTempwithQuery

重構 244

10.2方法重組的試探 247

10.3方法重組與Rent-a-Wheels 247

10.3.1刪除Rent-a-Wheels

中的重複 249

10.3.2Rent-a-Wheels中的幻數、

注釋以及事件處理盲區 251

10.4小結 255

第Ⅳ部分高級重構

第11章發現對象 259

11.1面向對象編程的快速回顧 259

11.1.1到底什麼是對象 260

11.1.2封裝與對象 260

11.1.3Refactor!中的

EncapsulateField重構 261

11.1.4對象狀態的保持 263

11.1.5類 264

11.1.6對象標識 265

11.1.7作為基本構建塊的對象 266

11.1.8根對象 266

11.1.9對象的生存期和

垃圾回收 267

11.1.10訊息 268

11.2類的設計 268

11.2.1類是名詞,操作是動詞 271

11.2.2類、責任和協作者 275

11.2.3實體和關係 283

11.3發現隱藏的類 284

11.3.1處理資料庫驅動的設計 285

11.3.2從過程化設計到面向

對象設計的轉移 288

11.3.3保持域、表示和

持久化分離 294

11.3.4發現對象和Rent-a-Wheels

應用程式 300

11.4小結 306

第12章面向對象的高級概念和

相關的重構 309

12.1繼承、多態性和泛型 309

12.1.1繼承 310

12.1.2多態性 315

12.1.3泛型 318

12.2繼承的誤用以及重構

解決方案 319

12.2.1誤用繼承的組合和

其他誤用情形 322  

12.2.2繼承的重構——

列印系統的舉例 327

12.3泛型的使用 345

12.4Rent-a-Wheels應用程式中

的繼承和泛型 348

12.4.1提取超類 348

12.4.2運用泛型 349

12.4.3提取數據對象

提供者的類 349

12.5小結 354

第13章大規模的代碼組織 355

13.1命名空間 355

13.1.1命名指導原則與

命名空間的組織 355

13.1.2嵌套的命名空間 356

13.1.3修改根命名空間的名稱 356

13.1.4使用導入語句 357

13.2程式集 358

13.2.1二進制重用 358

13.2.2命名空間組織的

指導原則 360

13.2.3依賴性方面的考慮 364

13.3VisualBasic項目檔案的

結構組織 370

13.3.1Refactor!中的

MoveTypetoFile重構 371

13.3.2部分類 373

13.3.3繼承窗體 373

13.3.4抽象窗體的繼承 374

13.3.5將抽象窗體的工作

委託給窗體輔助類 375

13.4Rent-a-Wheels中命名空間

的組織與Windows

窗體繼承 377

13.4.1通過抽象窗體輔助

模式的應用程式來提

取父管理窗體 377

13.4.2命名空間和

程式集的重組 384

13.5小結 386

第Ⅴ部分重構的運用

第14章重構成模式 389

14.1到底什麼是設計模式 389

14.1.1設計模式的定義 390

14.1.2模式的分類 391

14.1.3模式的元素 391

14.1.4權衡設計模式的利弊 392

14.1.5模式的使用 392

14.2設計模式的示例:

AbstractFactory 392

14.2.1名稱 393

14.2.2問題 393

14.2.3解決方案 402

14.2.4後果 405

14.3DependencyInjection模式 407

14.3.1問題 407

14.3.2解決方案 410

14.3.3基於構造函式注入與

基於屬性注入 410

14.3.4應該注入什麼服務實現 411

14.3.5後果 412

14.3.6重構成DI 415

14.4重構成模式以及

Rent-a-Wheels應用程式 415

14.4.1消除.NET架構中所

提供的重複功能的代碼 415

14.4.2通過依賴注入向

GUI類中注入Data類 416

14.4.3CRUD持久化模式 418

14.5小結 418

第15章LINQ和VB2008的

其他增強功能 421

15.1局部變數的類型推斷 421

15.2XML生產能力的增強 422

15.2.1XML字面量 422

15.2.2通過XML軸屬性

導航XML 426

15.2.3將XML字面量

提取到Refactor!中

的資源中 426

15.3通過LINQ查詢對象 427

15.3.1舊示例換“新顏” 430

15.3.2LINQtoSQL的對象/

關係映射 433

15.3.3LINQ和Rent-a-Wheels

應用程式 436

15.4小結 445

第16章VB遺留代碼的未來 447

16.1是否需要遷移 448

16.1.1遷移不可能是百分

之百自動進行的 448

16.1.2VB6和VB.NET

代碼可以互操作 449

16.1.3遷移工具和庫 450

16.2初步的VB6重構 451

16.2.1打破整體化 452

16.2.2條件編譯的處理 453

16.3將被遷移的代碼放到測試

護具中 453

16.3.1引入功能測試護具 454

16.3.2實現功能測試護具 454

16.4遺留代碼的升級 457

16.4.1靜態嚴格類型化 458

16.4.2將設計從過程式設計

移到面向對象設計

的範例中 458

16.4.3引入繼承 459

16.4.4利用參數化的構造函式 460

16.4.5將泛型容器用於額外

的類型安全 460

16.4.6異常處理的升級 462

16.4.7XML注釋的實現 462

16.4.8釋放.NET中的資源 462

16.5小結 463

附錄ARefactor!揭密 465

附錄BRent-a-Wheels原型的內部機理和相互聯繫 467  

相關詞條

熱門詞條

聯絡我們