日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > C# >内容正文

C#

C#代码整洁之道:代码重构与性能提升

發布時間:2023/12/10 C# 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 C#代码整洁之道:代码重构与性能提升 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

C#語言曾主要用于開發Windows桌面應用和游戲程序,而現在已經在多個領域得到了廣泛應用,如Web應用程序和云應用程序。C#在移動開發領域的影響力也與日俱增。盡管C#擁有大量的編程特性,但專業人士還是會在工作中遇到由糟糕的代碼導致的效率、伸縮性和維護方面的相關問題。《C#代碼整潔之道:》一書將幫助你識別這些問題,并使用有效的編碼解決它們。

《C#代碼整潔之道:代碼重構與性能提升》


在《C#代碼整潔之道:代碼重構與性能提升》一書中,你將學習如何識別那些可以編譯,但可讀性、可維護性與可擴展性均不盡如人意的代碼。當然,你也將學到如何使用各種工具、模式和方法將上述問題代碼重構為整潔的代碼。

讀者對象

本書適合具備良好的C#語言編程知識,同時希望提升自己發現問題代碼的能力并編寫整潔代碼的開發人員閱讀。

內容簡介

  • 第1章通過優秀代碼和劣質代碼的對比來說明編碼的標準、原則、方法和約定的必要性。本章還將介紹模塊化的設計思路以及KISS、YAGNI、DRY、SOLID和奧卡姆剃刀法則等設計規范。

  • 第2章將詳細討論代碼評審的過程并說明其重要性,具體包括如何準備代碼以供審閱、如何引導代碼評審、應當評審哪些內容、何時進行代碼評審以及如何進行代碼評審的反饋。

  • 第3章涵蓋類的組織、文檔注釋、內聚性、耦合、迪米特法則和不可更改的對象與數據結構等一系列主題。在本章學習結束之后,你將可以編寫結構良好、符合單一職責原則、具備相應文檔并且可擴展性良好的代碼。

  • 第4章將介紹函數式編程的相關知識,并探討如何令函數保持短小精悍的狀態,避免出現重復代碼與過多的參數。在本章學習結束之后,你將能夠描述函數式編程的知識、編寫函數式代碼、避免編寫帶有過多(兩個以上)參數的函數、創建不可更改的數據對象或結構、保持方法短小并符合單一職責原則。

  • 第5章將介紹檢查型異常和非檢查型異常,NullPointerException,如何規避和處理這些異常,業務規則異常,如何在異常中提供有意義的信息以及如何創建自定義異常。

  • 第6章將結合SpecFlow介紹行為驅動開發(Behavior-Driven Development,BDD)方法,同時也將結合MSTest和NUnit工具介紹測試驅動開發(Test-Driven Development,TDD)方法。你將學到如何使用Moq編寫測試替身、如何用TDD的方式令測試失敗,或(實現功能)令測試通過,以及之后重構代碼并確保測試通過。

  • 第7章將使用范例工程演示如何進行手動的端到端測試,具體包括執行端到端測試、工廠的編碼和測試、依賴注入的編碼和測試,以及模塊化系統測試。本章還會介紹如何針對模塊化系統設計來執行端到端測試。

  • 第8章將著眼于講解以下內容:線程的生命周期、向線程傳遞參數、使用Thread-
    Pool、互斥量、線程間同步、使用信號量處理并行線程、限制ThreadPool中的線程數目和處理器用量、防止死鎖和競態條件、靜態方法和靜態構造器、可變性與不可變性以及線程安全。

  • 第9章將向你解釋API的定義、API代理、API的設計規范、使用RAML描述API的設計以及Swagger API開發。本章將使用RAML設計和語言無關的API,使用C#進行API的開發,并使用Swagger編寫API的文檔。

  • 第10章將展示如何獲取第三方API密鑰,將密鑰存儲在Azure Key Vault中,并使用在Azure上開發、部署的API獲得該密鑰,最后實現API的密鑰認證與鑒權功能來確保自身 API 的安全。

  • 第11章將使用 PostSharp,使用面向方面開發(aspect-oriented development)中的方面(aspect)和特性(attribute)這兩個基本元素來處理切面關注點。本章還將介紹代理對象和裝飾器的使用方法。

  • 第12章將介紹一系列工具來提升代碼編寫質量并提高現有代碼的質量,包括如何進行代碼度量、代碼分析,并進行快速操作。其中涉及被稱為dotTrace Prof?iler和ReSharper的JetBrains工具,以及Telerik JustDecompile工具。

  • 第13章和第14章會介紹不同類型的問題代碼,以及將這些代碼修改為易讀、易維護和易擴展的整潔代碼的方法。各類代碼問題將列在每一小節中,其中會涉及例如類的依賴,無法修改的代碼、集合,以及組合爆炸等問題。

  • 第14章還會介紹創建型和結構型的各類設計模式的實現方式,并簡要介紹行為型設計模式。在本章最后我們將對整潔代碼及重構進行總結。

使用說明

本書大部分章節可以按任意順序獨立閱讀。但是為了發揮本書的效果,我建議按章節的先后順序閱讀本書。

在閱讀過程中請遵照書中的說明,并完成書中提到的任務。在每一章結束時,請回答問題并閱讀相關推薦材料來鞏固所學的知識。本書的示例代碼均提供下載。

關于作者

Jason Alls擁有超過21年的Microsoft技術編程工作經驗,曾就職于一家澳大利亞公司。他最初負責呼叫中心管理報告軟件的開發,該軟件服務于全球客戶,包括電信供應商、銀行、航空公司和警察機構。后續開發過GIS市場營銷應用程序,在銀行部門負責Oracle和SQL Server間的數據遷移。從2005年獲得C# MCAD認證以來,他一直在參與各種桌面、Web 和移動應用程序的開發。他目前任職于全球知名的英國教育公司GL Education,使用ASP.NET、Angular和C#進行閱讀障礙測試,評估軟件的開發與支持工作。

目錄

第1章 C#的編碼標準和原則? 1

1.1 技術要求? 2

1.2 良好的代碼與劣質的代碼? 2

1.2.1 劣質的代碼? 3

1.2.2 良好的代碼? 14

1.3 編碼標準、原則和方法的必要性? 18

1.3.1 編碼標準? 19

1.3.2 編碼原則? 19

1.3.3 編碼方法? 19

1.3.4 編碼規則? 20

1.3.5 模塊化? 20

1.3.6 KISS原則? 20

1.3.7 YAGNI原則? 21

1.3.8 DRY原則? 21

1.3.9 SOLID原則? 21

1.3.10 奧卡姆剃刀法則? 22

1.4 總結? 22

1.5 習題? 22

1.6 參考資料? 23

第2章 代碼評審—過程及其重要性? 24

2.1 代碼評審流程? 25

2.2 準備代碼評審? 25

2.3 引導代碼評審? 26

2.3.1 創建pull request? 27

2.3.2 響應pull request? 28

2.3.3 反饋對被評審人的影響? 30

2.4 確定評審內容? 33

2.4.1 公司編碼規范與業務需求? 34

2.4.2 命名規則? 34

2.4.3 代碼格式? 34

2.4.4 測試? 35

2.4.5 架構規范和設計模式? 35

2.4.6 性能和安全性? 36

2.5 何時發起代碼評審? 36

2.6 提供并回應評審反饋? 37

2.6.1 評審人提供反饋意見? 38

2.6.2 被評審人回應反饋? 38

2.7 總結? 39

2.8 習題? 39

2.9 參考資料? 40

第3章 類、對象和數據結構? 41

3.1 技術要求? 41

3.2 組織類? 42

3.3 一個類應當只具備一種職責? 43

3.4 從注釋生成文檔? 45

3.5 內聚和耦合? 48

3.5.1 緊耦合范例? 48

3.5.2 低耦合范例? 49

3.5.3 低內聚范例? 50

3.5.4 高內聚范例? 51

3.6 為變化而設計? 52

3.6.1 面向接口編程? 52

3.6.2 依賴注入和控制反轉? 54

3.6.3 DI范例? 54

3.6.4 IoC范例? 56

3.7 迪米特法則? 57

3.8 不可變對象與數據結構? 59

3.9 對象應當隱藏數據并暴露方法? 60

3.10 數據結構體應當暴露數據而無須包含方法? 61

3.11 總結? 62

3.12 習題? 62

3.13 參考資料? 63

第4章 編寫整潔的函數? 64

4.1 理解函數式編程? 65

4.2 保持方法短小? 67

4.3 代碼縮進? 69

4.4 避免重復代碼? 70

4.5 避免多個參數? 71

4.6 實現單一職責原則? 72

4.7 總結? 76

4.8 習題? 76

4.9 參考資料? 77

第5章 異常處理? 78

5.1 檢查型異常和非檢查型異常? 79

5.2 避免NullReferenceException? 82

5.3 業務規則異常? 84

5.3.1 范例1—使用業務規則異常進行條件處理? 86

5.3.2 范例2—使用正常程序流程進行條件處理? 87

5.4 異常應當提供有意義的信息? 89

5.5 創建自定義異常? 90

5.6 總結? 92

5.7 習題? 93

5.8 參考資料? 93

第6章 單元測試? 94

6.1 技術要求? 95

6.2 為何要進行良好的測試? 95

6.3 了解測試工具? 98

6.3.1 MSTest? 99

6.3.2 NUnit? 105

6.3.3 Moq? 110

6.3.4 SpecFlow? 114

6.4 TDD方法實踐—失敗、通過與重構? 117

6.5 刪除冗余的測試、注釋以及無用代碼? 122

6.6 總結? 123

6.7 習題? 123

6.8 參考資料? 124

第7章 端到端系統測試? 125

7.1 端到端測試? 125

7.1.1 登錄模塊(子系統)? 127

7.1.2 管理員模塊(子系統)? 129

7.1.3 測驗模塊(子系統)? 131

7.1.4 對三模塊系統執行E2E測試? 132

7.2 工廠? 134

7.3 依賴注入? 140

7.4 模塊化? 145

7.5 總結? 147

7.6 習題? 147

7.7 參考資料? 147

第8章 線程與并發? 148

8.1 理解線程的生命周期? 149

8.2 添加線程參數? 150

8.3 使用線程池? 151

8.3.1 任務并行庫? 152

8.3.2 ThreadPool.QueueUserWorkItem()方法? 153

8.4 使用互斥量同步線程? 154

8.5 使用信號量處理并行線程? 156

8.6 限制線程池使用的處理器數目及線程數目? 158

8.7 避免死鎖? 159

8.8 避免競態條件? 164

8.9 理解靜態構造器和靜態方法? 166

8.9.1 添加靜態構造器? 167

8.9.2 在代碼中添加靜態方法? 168

8.10 可變性、不可變性與線程安全? 170

8.10.1 編寫可變且線程不安全的代碼? 171

8.10.2 編寫不可變且線程安全的代碼? 172

8.11 理解線程安全? 173

8.12 同步方法依賴? 177

8.13 使用Interlocked類? 177

8.14 通用建議? 180

8.15 總結? 181

8.16 習題? 181

8.17 參考資料? 182

第9章 API的設計與開發? 183

9.1 技術要求? 184

9.2 什么是API? 184

9.3 API代理? 185

9.4 API設計準則? 186

9.4.1 明確定義軟件邊界? 189

9.4.2 理解高質量API文檔的重要性? 190

9.4.3 傳遞不可變結構體而非可變對象? 192

9.4.4 測試第三方API? 195

9.4.5 測試自己的API? 196

9.5 使用RAML設計API? 197

9.5.1 安裝Atom和MuleSoft的Workbench插件? 198

9.5.2 創建項目? 198

9.5.3 從RAML語言無關設計規范生成C# API代碼? 200

9.6 總結? 203

9.7 習題? 204

9.8 參考資料? 204

第10章 使用API密鑰和Azure Key Vault保護API? 206

10.1 技術要求? 207

10.2 范例API項目—股息日歷? 207

10.3 訪問Morningstar API? 208

10.4 在Azure中創建股息日歷ASP.NET Core Web應用程序? 210

10.5 使用API密鑰保護股息日歷API? 215

10.5.1 創建repository? 216

10.5.2 設置認證和鑒權功能? 218

10.6 測試API密鑰安全功能? 223

10.7 添加股息日歷代碼? 226

10.8 限制API調用? 232

10.9 總結? 235

10.10 習題? 236

10.11 參考資料? 236

第11章 處理切面關注點? 237

11.1 技術要求? 238

11.2 裝飾器模式? 238

11.3 代理模式? 240

11.4 使用PostSharp實現AOP? 242

11.4.1 擴展“方面”框架? 242

11.4.2 擴展架構框架? 244

11.5 創建可重用的解決切面關注點問題的類庫? 245

11.5.1 添加緩存關注點? 245

11.5.2 添加文件日志功能? 246

11.5.3 添加日志關注點? 247

11.5.4 添加異常處理關注點? 249

11.5.5 添加安全關注點? 249

11.5.6 添加驗證關注點? 252

11.5.7 添加事務關注點? 256

11.5.8 添加資源池關注點? 257

11.5.9 添加配置關注點? 257

11.5.10 添加檢測關注點? 258

11.6 總結? 259

11.7 習題? 259

11.8 參考資料? 259

第12章 使用工具改善代碼質量? 260

12.1 技術要求? 261

12.2 什么是高質量代碼? 261

12.3 清理代碼并進行代碼度量? 262

12.4 執行代碼分析? 264

12.5 使用快速操作? 267

12.6 使用JetBrains dotTrace探查工具? 267

12.7 使用JetBrains ReSharper? 271

12.8 使用Telerik JustDecompile工具? 279

12.9 總結? 280

12.10 習題? 280

12.11 參考資料? 281

第13章 重構C#代碼—識別代碼壞味道? 282

13.1 技術要求? 282

13.2 應用程序級別代碼壞味道? 283

13.2.1 布爾盲點? 283

13.2.2 組合爆炸? 284

13.2.3 人為復雜性? 285

13.2.4 數據泥團? 286

13.2.5 粉飾注釋? 286

13.2.6 重復代碼? 286

13.2.7 意圖不明? 287

13.2.8 可變的變量? 287

13.2.9 怪異的解決方案? 288

13.2.10 霰彈式修改? 290

13.2.11 解決方案蔓延? 291

13.2.12 不可控的副作用? 292

13.3 類級別代碼壞味道? 292

13.3.1 過高的圈復雜度? 292

13.3.2 發散式變化? 295

13.3.3 向下類型轉換? 296

13.3.4 過度的字面量使用? 296

13.3.5 依戀情結? 296

13.3.6 狎昵關系? 298

13.3.7 不恰當的暴露? 298

13.3.8 巨大的類? 298

13.3.9 冗贅類? 298

13.3.10 中間人類? 299

13.3.11 孤立的變量和常量類? 299

13.3.12 基本類型偏執? 299

13.3.13 被拒絕的遺贈? 299

13.3.14 夸夸其談未來性? 299

13.3.15 命令,而非詢問? 300

13.3.16 臨時字段? 300

13.4 方法級別的代碼壞味道? 300

13.4.1 不合群的方法? 300

13.4.2 過高的圈復雜度? 300

13.4.3 人為復雜性? 300

13.4.4 無用的代碼? 301

13.4.5 過多的返回數據? 301

13.4.6 依戀情結? 301

13.4.7 過長或過短的標識符? 301

13.4.8 狎昵關系? 301

13.4.9 過長的代碼行? 301

13.4.10 冗贅方法? 301

13.4.11 過長的方法? 302

13.4.12 參數過多? 302

13.4.13 過度耦合的消息鏈? 302

13.4.14 中間人方法? 302

13.4.15 怪異的解決方案? 302

13.4.16 夸夸其談未來性? 302

13.5 總結? 302

13.6 習題? 303

13.7 參考資料? 304

第14章 重構C#代碼—實現設計模式? 305

14.1 技術要求? 306

14.2 實現創建型設計模式? 306

14.2.1 實現單例設計模式? 306

14.2.2 實現工廠方法設計模式? 307

14.2.3 實現抽象工廠設計模式? 308

14.2.4 實現原型設計模式? 311

14.2.5 實現建造者設計模式? 313

14.3 實現結構型設計模式? 317

14.3.1 實現橋接設計模式? 317

14.3.2 實現組合設計模式? 319

14.3.3 實現外觀設計模式? 321

14.3.4 實現享元設計模式? 323

14.4 行為型設計模式概述? 325

14.5 關于整潔代碼和重構的思考? 326

14.6 總結? 328

14.7 習題? 328

14.8 參考資料? 329

參考答案? 330

更多C#推薦

《C# 8.0本質論》

推薦語:世界知名C#技術大師傳世經典之作,微軟公司C#首席設計師作序推薦;開發指導與編程思想講解兼顧,適合各層次C#程序開發人員閱讀參考。對于初學者而言,其內容已遠遠超過了一本簡單的教程,可為讀者未來進行高效率軟件開發打下堅實基礎;對于已熟悉C#的讀者,本書探討了一些較為復雜的編程思想,并深入討論了語言較新版本(C# 8.0和.NET Framework 4.8/.NET Core 3.1)的新功能;對于已經精通這門語言的讀者,也可以始終將其作為案頭參考。

《C# 8.0核心技術指南》

推薦語:本書全方位地介紹了 C# 的語言特性。在內容上,它兼顧了各種類型的讀者。對于初學者,本書不論是介紹基本的語法,還是介紹高級的語言特性,都采用了講解和示例結合的方法。而對于經驗豐富的讀者,本書的每一章都詳盡而系統,是的案頭參考書。本書在前一版的基礎上進行了大量的修訂工作。不但將既有的內容和范例全部遷移到 .NET Core 之上,對 C# 8.0 與 .NET Core 3.x 提供的新特性進行了詳細的介紹,還在部分示例中專門對編寫跨平臺運行的程序的技巧或陷阱進行了說明??梢哉f,本書從內容上涵蓋了目前 C# 與 .NET Core 全新正式發行版的內容。

《C#編程魔法書》

推薦語:以2個綜合案例貫穿全書,從語法到多線程/并行編程,從簡單開發到分布式系統,隨書代碼拿來即用。本書將示例代碼與實際業務場景結合作為第一考量因素。本書主要通過高頻交易程序和交易所撮合引擎兩個示例程序來配合介紹C#編程,內容由淺入深,示例程序的功能也是逐漸豐富的,相信會讓讀者受到啟發。

更多精彩回顧

書訊 |?5月書訊(上)|??元宇宙、因果推斷、薛定諤方程...你關注的都在這

書訊 |?5月書訊(下)|設計致物系列+少兒編程好書推薦

資訊 |為企業數字人才建糧倉:專訪極客邦科技雙數研究院院長付曉巖

資訊?|2022美國科學院院士名單公布:圖靈獎得主、龍書作者Alfred V. Aho當選!

干貨?| 為什么每一名程序員都應該學習 C++?

干貨 |?如果機器翻譯始終存在缺陷和錯誤,那它還有什么用處?

總結

以上是生活随笔為你收集整理的C#代码整洁之道:代码重构与性能提升的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。