Azure、DevOps 和微服務軟件架構實戰, 2/e Software Architecture with C# 9 and .NET 5 - Second Edition: Architecting software solutions using microservices, DevOps, and design patterns for Azur

[葡] 加布里埃爾·巴普蒂斯特(Gabriel Baptista) [意]弗朗西斯科·阿布魯澤塞(Francesco Abbruzzese)著 葉偉民 張陶棟 王偉 肖

  • Azure、DevOps 和微服務軟件架構實戰, 2/e-preview-1
  • Azure、DevOps 和微服務軟件架構實戰, 2/e-preview-2
  • Azure、DevOps 和微服務軟件架構實戰, 2/e-preview-3
Azure、DevOps 和微服務軟件架構實戰, 2/e-preview-1

買這商品的人也買了...

商品描述

軟件架構是指可以簡化軟件開發過程並提高應用程序質量的實現架構和系統。本書在第1版的基礎上進行了全面修訂和擴展,面向.NET 5和C# 9,介紹了一些能夠助你成為一名卓越的軟件架構師所需的關鍵技能、知識和**實踐。   第2版增加了對軟件架構原則的額外講述、Azure服務結構、Kubernetes和Blazor等新章節。另外,還增加了關於安全性、微服務和DevOps的討論,以及軟件開發周期的GitHub部署。   首先,介紹如何將用戶需求轉換為軟件架構需求,並探討功能性需求和非功能性需求之間的差異。然後,探討如何為基礎設施選擇雲解決方案,以及如何在基於雲的環境中管理應用程序。最後,講解軟件設計模式和各種軟件方法,從而幫助你解決開發過程中遇到的常見問題。   學習完本書,你將能夠構建並交付可滿足組織業務需求的高度可擴展的企業應用程序。 主要內容 ● 使用多種技術剋服現實工作中的架構挑戰,並從設計層面解決問題 ● 應用分層架構、面向服務架構和微服務架構 ● 利用容器、Docker、Kubernetes和Blazor等工具高效管理微服務 ● 快速使用Azure工具和功能提供全局解決方案 ● 使用C# 9及其新功能編程和維護Azure功能 ● 瞭解什麽情況下最適合使用測試驅動開發方法 ● 編寫自動化功能測試用例 ● 充分利用DevOps原則實現CI/CD環境

目錄大綱

目    錄

 

第1章  軟件架構的重要性 1

1.1  什麽是軟件架構 1

1.2  軟件開發過程模型 4

1.2.1  傳統的軟件開發過程模型 4

1.2.2  敏捷軟件開發過程模型 6

1.3  收集正確信息以設計高質量軟件 10

1.3.1  瞭解需求收集過程 10

1.3.2  收集準確的用戶需求 10

1.3.3  分析需求 11

1.3.4  將需求整理成規範的文檔 11

1.3.5  復核用戶需求文檔 13

1.4  設計技術 13

1.4.1  設計思維 13

1.4.2  設計沖刺 14

1.5  收集需求階段就要考慮的常見問題 14

1.5.1  問題1:網站太慢,無法打開網頁 14

1.5.2  問題2:用戶的需求未得到正確實現 16

1.5.3  問題3:系統會在什麽環境使用 17

1.6  World Wild Travel Club案例簡介 17

1.7  本章小結 19

1.8   練習題 19

第2章  非功能性需求 21

2.1  技術性要求 21

2.2  使用Azure和.NET 5實現可擴展性、可用性和可恢復性 21

2.2.1  在Azure中創建可擴展的Web應用程序 22

2.2.2  使用.NET 5創建可擴展的Web應用程序 26

2.3  C#編程時需要考慮的性能問題 29

2.3.1  字符串串聯 29

2.3.2  異常 30

2.3.3  多線程 31

2.4  易用性——插入數據為什麽會耗費太長時間 32

2.4.1  如何設計快速選擇 33

2.4.2  從大量的條目中進行選擇 34

2.5  .NET Core的互操作性 35

2.6  在設計層面實現安全性 37

2.7  用例——瞭解.NET Core項目的主要類型 38

2.8  本章小結 40

2.9  練習題 40

第3章  使用Azure DevOps記錄需求 41

3.1  技術性要求 41

3.2  Azure DevOps介紹 41

3.3  使用Azure DevOps 組織工作 45

3.3.1  Azure DevOps存儲庫 45

3.3.2  包源 47

3.3.3  測試計劃 49

3.3.4  管道 50

3.4  使用Azure DevOps管理系統需求 50

3.4.1  Epic工作項 50

3.4.2  Feature工作項 51

3.4.3  Product Backlog工作項/ User Story工作項 51

3.5  用例——在Azure DevOps中展現WWTravelClub 51

3.6  本章小結 55

3.7  練習題 55

第4章 確定基於雲的最佳解決方案 56

4.1  技術性要求 56

4.2  不同的軟件部署模型 56

4.2.1  IaaS和Azure服務 57

4.2.2  PaaS—— 開發者的世界 59

4.2.3  SaaS——只需要登錄即可開始 63

4.2.4  無服務器解決方案 64

4.3  為什麽混合應用程序在許多情況下如此有用 64

4.4  用例——哪一種才是最好的

雲解決方案 65

4.5  本章小結 66

4.6  練習題 66

第5章 在企業應用中應用微服務架構 67

5.1  技術性要求 67

5.2  什麽是微服務 67

5.2.1  微服務與模塊概念的演變 68

5.2.2  微服務設計原則 69

5.2.3  容器和Docker 71

5.3  微服務什麽時候有幫助 72

5.3.1  分層架構和微服務 72

5.3.2  什麽時候值得考慮微服務架構 74

5.4  .NET如何處理微服務 75

5.4.1  .NET通信工具 75

5.4.2  可恢復性任務執行 76

5.4.3  使用通用宿主 77

5.4.4  Visual Studio對Docker的支持 80

5.4.5  Azure和Visual Studio對微服務編排的支持 84

5.5  管理微服務需要哪些工具 84

5.6  本章小結 86

5.7  練習題 86

第6章 Azure Service Fabric 87

6.1  技術性要求 87

6.2  定義和配置Azure Service Fabric群集 90

6.2.1  步驟1:基本信息 90

6.2.2  步驟2:群集配置 91

6.2.3  步驟3:安全配置 93

6.3  用例——購買記錄微服務 95

6.3.1  確保消息冪等性 97

6.3.2  交互程序庫 99

6.3.3  實現通信的接收端 100

6.3.4  實現服務邏輯 102

6.3.5  定義微服務的宿主 106

6.3.6  與服務進行通信 107

6.3.7  測試應用程序 108

6.4  本章小結 109

6.5  練習題 109

第7章 Azure Kubernetes服務 110

7.1  技術性要求 110

7.2  Kubernetes 基礎 110

7.2.1  .yaml 文件 111

7.2.2  ReplicaSet和Deployment 112

7.2.3  StatefulSet 114

7.2.4  Service 114

7.2.5  Ingress 118

7.3  與Azure Kubernetes群集交互 119

7.3.1  使用 Kubectl 121

7.3.2  部署留言板示例應用程序 122

7.4  Kubernetes高級概念 124

7.4.1  需要永久存儲 125

7.4.2  Kubernetes Secret 126

7.4.3  存活性和就緒性檢查 127

7.4.4  自動縮放 128

7.4.5  Helm:安裝入口控制器 129

7.5  本章小結 131

7.6  練習題 132

第8章 在C#中與數據進行交互——Entity Framework Core 133

8.1  技術性要求 133

8.2  ORM基礎 134

8.3  配置Entity Framework Core 136

8.3.1  定義數據庫實體 137

8.3.2  定義映射集合 139

8.3.3  完成映射配置 139

8.4  Entity Framework Core遷移 141

8.5  使用Entity Framework Core查詢和更新數據 144

8.5.1  將數據返回給表示層 147

8.5.2  直接發出SQL命令 148

8.5.3  處理事務 149

8.6  數據層的部署 149

8.7  Entity Framework Core的高級功能 150

8.8  本章小結 151

8.9  練習題 151

第9章 在雲上選擇數據存儲 152

9.1  技術性要求 152

9.2  不同用途的不同存儲庫 153

9.2.1  關系數據庫 153

9.2.2  NoSQL數據庫 155

9.2.3  Redis 156

9.2.4  Azure存儲賬戶 156

9.3  在結構化存儲和NoSQL存儲之間進行選擇 157

9.4  Azure Cosmos DB—— 一種管理跨區域數據庫的選擇 158

9.4.1  創建一個Azure Cosmos DB賬戶 158

9.4.2  創建Azure Cosmos集合 159

9.4.3  訪問Azure Cosmos 數據 160

9.4.4  定義數據庫一致性 160

9.4.5  Cosmos DB客戶端 162

9.4.6  Cosmos DB的Entity Framework Core提供程序 163

9.5  用例——存儲數據 164

9.6  本章小結 167

9.7  練習題 167

第10章  Azure函數應用 168

10.1  技術性要求 168

10.2  Azure函數應用程序 168

10.2.1  消耗計劃 169

10.2.2  函數高級計劃 169

10.2.3  應用服務計劃 170

10.3  使用C#運行Azure函數應用 170

10.4  維護Azure函數應用 174

10.5  用例——通過Azure函數應用發送電子郵件 176

10.5.1  第一步:創建Azure隊列存儲 176

10.5.2  第二步:創建發送電子郵件的函數 178

10.5.3  第三步:創建Queue Trigger函數 180

10.6  本章小結 181

10.7  練習題 181

第11章  設計模式與.NET 5實現 182

11.1  技術性要求 182

11.2  設計模式及其目的 182

11.2.1  建造者模式 183

11.2.2  工廠模式 185

11.2.3  單例模式 186

11.2.4  代理模式 188

11.2.5  命令模式 189

11.2.6  發布者-訂閱者模式 190

11.2.7  依賴註入模式 191

11.3  .NET 5中可用的設計模式 192

11.4  本章小結 193

11.5  練習題 193

第12章  不同領域的軟件解決方案 194

12.1  技術性要求 195

12.2  什麽是軟件領域 195

12.3  理解領域驅動設計 196

12.4  實體和值對象 198

12.5  使用SOLID原則映射領域 201

12.6  聚合 203

12.7  存儲庫和工作單元模式 204

12.8  DDD實體和Entity Framework Core 205

12.9  命令查詢職責分離模式 206

12.10  命令處理程序和領域事件 208

12.11  事件溯源 210

12.12  用例——WWTravelClub的領域 210

12.13  本章小結 212

12.14  練習題 212

第13章  在C# 9中實現代碼復用 214

13.1  技術性要求 214

13.2  代碼復用的原則 214

13.2.1  什麽不是代碼復用 215

13.2.2  什麽是代碼復用 215

13.3  開發生命周期中的可復用性 216

13.4  使用.NET 5或.NET Standard進行代碼復用 217

13.5  在C#中處理代碼復用 218

13.5.1  面向對象分析 218

13.5.2  泛型 220

13.6  如果代碼不可復用怎麽辦 220

13.7  如何推廣可復用的程序庫 221

13.7.1  使用DocFX文檔化.NET程序庫 221

13.7.2  使用Swagger文檔化Web API 222

13.8  用例——復用代碼以快速交付優質、安全的軟件 223

13.9  本章小結 223

13.10  練習題 224

第14章  使用.NET Core實現面向服務的架構 225

14.1  技術性要求 225

14.2  SOA方法的原則 226

14.3  SOAP Web服務 228

14.4  REST Web服務 229

14.4.1  服務類型兼容性規則 229

14.4.2  REST與原生HTTP功能 230

14.4.3  REST語言中的方法示例 232

14.4.4  OpenAPI標準 232

14.4.5  REST服務的身份驗證和鑒權 233

14.5  如何在.NET 5中處理SOA 235

14.5.1  對SOAP客戶端的支持 235

14.5.2  對gRPC的支持 236

14.5.3  ASP.NET Core簡介 236

14.5.4  使用ASP.NET Core實現REST服務 239

14.6  用例——公開WWTravelClub的旅行方案 248

14.7  本章小結 252

14.8  練習題 253

第15章  ASP.NET Core MVC 254

15.1  技術性要求 254

15.2  Web應用程序的表示層 254

15.3  ASP.NET Core MVC架構 255

15.3.1  ASP.NET Core管道工作原理 255

15.3.2  加載配置數據並與options框架一起使用 258

15.3.3  定義ASP.NET Core MVC管道 261

15.3.4  定義控制器和ViewModel 265

15.3.5  Razor視圖 267

15.3.6  復用視圖代碼 273

15.4  ASP.NET Core最新版本的新增功能 275

15.5  ASP.NET Core MVC和設計原則的關系 276

15.5.1  ASP.NET Core管道的優點 277

15.5.2  服務器端和客戶端驗證 277

15.5.3  ASP.NET Core多語言支持 278

15.5.4  MVC模式 280

15.6  用例 —— 使用ASP.NET Core MVC實現Web應用程序 281

15.6.1  定義應用程序規範 281

15.6.2  定義應用程序架構 282

15.6.3  控制器和視圖 293

15.7  本章小結 298

15.8  練習題 298

第16章  Blazor WebAssembly 299

16.1  技術性要求 299

16.2  Blazor WebAssembly架構 300

16.2.1  什麽是單頁應用程序 300

16.2.2  加載並啟動應用程序 301

16.2.3  路由 303

16.3  Blazor頁面和組件 304

16.3.1  組件結構 304

16.3.2  模板和級聯參數 307

16.3.3  事件 309

16.3.4  綁定 311

16.3.5  Blazor如何更新HTML 312

16.3.6  組件生命周期 313

16.4  Blazor表單和驗證 314

16.5  Blazor高級功能 316

16.5.1  對組件和HTML元素的引用 316

16.5.2  JavaScript互操作性 316

16.5.3  全球化與本地化 318

16.5.4  身份驗證和授權 318

16.5.5  與服務器的通信 320

16.6  Blazor WebAssembly第三方工具 321

16.7  用例——使用Blazor WebAssembly實現一個簡單的應用程序 322

16.7.1  準備解決方案 322

16.7.2  實現所需的ASP.NET Core REST API 323

16.7.3  在服務中實現業務邏輯 325

16.7.4  實現用戶界面 325

16.8  本章小結 328

16.9  練習題 328

第17章  C# 9編碼最佳實踐 329

17.1  技術性要求 329

17.2  越糟糕的程序員,編碼越復雜 329

17.2.1  可維護性指數 330

17.2.2  圈復雜度 330

17.2.3  繼承深度 333

17.2.4  類耦合度 334

17.2.5  源代碼行 336

17.3  使用版本控制系統 336

17.4  用C#編寫安全代碼 336

17.4.1  try-catch 336

17.4.2  try-finally和using 337

17.4.3  IDisposable接口 338

17.5  編寫.NET 5代碼的提示與技巧 339

17.6  編寫代碼時的註意事項 340

17.7  本章小結 341

17.8  練習題 341

第18章  單元測試用例和TDD 342

18.1  技術性要求 342

18.2  單元測試和集成測試 342

18.2.1  對單元測試和集成測試進行自動化 343

18.2.2  編寫自動化單元測試與集成測試 344

18.2.3  編寫驗收測試和性能測試 345

18.3  測試驅動開發 346

18.4  定義C#測試項目 347

18.4.1  使用xUnit測試框架 348

18.4.2  高級測試準備和清理場景 350

18.4.3  使用Moq模擬接口 351

18.5  用例 —— 在Azure DevOps中對單元測試進行自動化 352

18.6  本章小結 359

18.7  練習題 359

第19章  使用工具編寫更好的代碼 360

19.1  技術性要求 360

19.2  識別編寫良好的代碼 360

19.3  使用C#代碼評估工具 361

19.4  使用擴展工具分析代碼 365

19.4.1  使用Microsoft Code Analysis 2019 365

19.4.2  使用SonarLint for Visual Studio 2019 365

19.5  檢查分析之後的最終代碼 366

19.6  用例——在應用程序發布之前評估C#代碼 367

19.7  本章小結 368

19.8  練習題 369

第20章  DevOps 370

20.1  技術性要求 370

20.2  DevOps的描述 371

20.3  DevOps原則 371

20.4  Azure DevOps的持續交付 372

20.4.1  使用Azure管道部署程序包管理應用程序 372

20.4.2  多階段環境 379

20.5  定義持續反饋和相關的DevOps工具 381

20.5.1  使用Azure Monitor Application Insights監控軟件 381

20.5.2  使用測試和反饋工具實現反饋 384

20.6  SaaS 388

20.6.1  使組織適應服務場景 388

20.6.2  服務場景中的軟件開發過程 388

20.6.3  服務場景在技術層面的可能影響 388

20.6.4  決定何時採用SaaS解決方案 389

20.6.5  為服務場景準備解決方案 389

20.7  用例——WWTravelClub 項目方案 391

20.8  本章小結 391

20.9  練習題 392

第21章  持續集成所帶來的挑戰 393

21.1  技術性要求 393

21.2  持續集成 393

21.3  持續集成和GitHub 394

21.4  使用持續集成的風險和挑戰 396

21.4.1  禁用生產環境的持續部署 397

21.4.2  不完整的功能 398

21.4.3  不穩定的測試解決方案 400

21.5  WWTravelClub 項目方案 403

21.6  本章小結 403

21.7  練習題 403

第22章  功能測試自動化 404

22.1  技術性要求 404

22.2  功能測試的目的 404

22.3  在C#中使用單元測試工具來自動化功能測試 406

22.3.1  測試模擬環境中的應用程序 407

22.3.2  測試受控應用程序 408

22.4  用例——自動化功能測試 410

22.5  本章小結 412

22.6  練習題 413