ASP.NET Core技術(shù)內(nèi)幕與項目實戰(zhàn)
定 價:119 元
- 作者:楊中科
- 出版時間:2022/6/1
- ISBN:9787115586575
- 出 版 社:人民郵電出版社
- 中圖法分類:TP393.092.2
- 頁碼:396
- 紙張:
- 版次:01
- 開本:16開
本書講解.NET平臺下的異步編程、LINQ、依賴注入、配置系統(tǒng)、日志等相關(guān)技術(shù)的原理與應(yīng)用;深入且全面地介紹Entity Framework Core在項目中的應(yīng)用場景,剖析Entity Framework Core的實現(xiàn)原理。本書在講解使用ASP.NET Core進行Web API開發(fā)的同時,結(jié)合作者的實踐經(jīng)驗介紹REST、前后端分離等編程理念在ASP.NET Core中的實現(xiàn)。此外,本書還會介紹領(lǐng)域驅(qū)動設(shè)計(DDD)的理念,并且通過來自項目開發(fā)一線的案例講解DDD理念在項目中的技術(shù)落地方案。最后,本書通過真實的英語學(xué)習(xí)網(wǎng)站的項目案例講解ASP.NET Core技術(shù)在項目中的應(yīng)用。總體而言,本書不僅介紹技術(shù)的使用,而且講解技術(shù)的底層原理;不僅介紹作者在項目開發(fā)一線的實踐經(jīng)驗,而且講解綜合項目案例的具體實現(xiàn)。
本書可供具有一定編程基礎(chǔ)的開發(fā)人員學(xué)習(xí)ASP.NET Core的使用方法,也可供具有一定經(jīng)驗的.NET開發(fā)人員了解.NET的內(nèi)部原理和學(xué)習(xí)相關(guān)項目實戰(zhàn)經(jīng)驗,還可作為大中專院校學(xué)生的ASP.NET Core教材。
作者說:寫一本關(guān)于.NET Core的書并不難,但是寫一本關(guān)于.NET Core的好書太難了!如果只是為了寫一本講解.NET Core的書,我只要照著微軟的官方文檔去改編一下就行了,但是這樣編出來的書有什么價值呢?微軟的.NET文檔所講的內(nèi)容已經(jīng)非常豐富了,我沒必要再去把它們重復(fù)一遍。我需要講解微軟文檔中沒有講到的內(nèi)容,讀者也需要這樣一本書:
> 講解相關(guān)技術(shù)背后的原理;
> 講解相關(guān)技術(shù)應(yīng)用在哪些場景中;
> 講解相關(guān)技術(shù)有哪些優(yōu)缺點;
> 講解相關(guān)技術(shù)在項目中如何應(yīng)用;
> 講解真實項目的架構(gòu)和技術(shù)實現(xiàn)。
為了達成上述目標(biāo),我在編寫本書的時候做了大量的底層源代碼的研究工作。比如,在講解“異步編程”的時候,我翻閱了.NET中異步編程的源代碼,從而幫助讀者更好地理解和應(yīng)用異步編程;又如,在講解“表達式樹”的時候,我翻閱了EF Core的表達式樹翻譯引擎,并且編寫了一個關(guān)于翻譯引擎的開源項目,以幫助讀者理解“表達式樹”的底層原理。
項目中很多技術(shù)的講解需要基于具有一定深度的實踐應(yīng)用案例,這樣才能避免技術(shù)的講解流于表面,因此我在本書中編入了很多具有深度的案例。比如,在講解依賴注入的時候,我通過開發(fā)一個自己的配置系統(tǒng)、日志系統(tǒng)講解依賴注入是如何把系統(tǒng)組件裝配在一起的;又如,在講解ASP.NET Core中間件的時候,我編寫了一個模仿ASP.NET Core Web API的框架,為讀者講解中間件的實際應(yīng)用。
特別說明:
□ 關(guān)于配套資源
鑒于篇幅受限,作者不能把本書每個案例的每一行代碼都寫到書中,即書中的代碼都是關(guān)鍵代碼。如果讀者想要本書配套的全部代碼,則可通過人郵教育社區(qū)(www.ryjiaoyu.com)中的本書所在頁面進行獲取。
□ 關(guān)于視頻教程
本書還贈送讀者配套視頻教程。在視頻教程中,作者從與圖書不同的角度對技術(shù)進行詮釋。讀者結(jié)合視頻教程學(xué)習(xí)本書,效果會更好。讀者可以通過嗶哩嗶哩搜索“楊中科”以觀看相關(guān)視頻教程,也可通過人郵教育社區(qū)下載相關(guān)視頻教程。
□ 遇到問題怎么辦
讀者可以添加作者微信“yzk10240124”以與作者進行交流,同時可以將您針對本書的修改建議與意見反饋給作者。同時,關(guān)于本書的勘誤與答疑,以及新版功能免費博客等內(nèi)容,讀者也可以通過讀者微信進行了解。祝您學(xué)習(xí)愉快!
楊中科:
.NET方向微軟MVP,擁有約30萬粉絲以及近18年的IT行業(yè)軟件開發(fā)工作經(jīng)驗,擅長軟件架構(gòu)設(shè)計與底層框架研究,具有應(yīng)用.NET、Java、Python、C等的豐富經(jīng)驗,編寫的技術(shù)文章和錄制的視頻教程深入淺出、通俗易懂、備受好評;同時,出版了多部優(yōu)秀的軟件開發(fā)技術(shù)圖書。
【章名目錄】
第 1章 .NET Core入門 1
第 2章 .NET Core重難點知識 14
第3章 .NET Core核心基礎(chǔ)組件 53
第4章 Entity Framework Core基礎(chǔ) 75
第5章 EF Core高級技術(shù) 116
第6章 ASP.NET Core Web API基礎(chǔ) 155
第7章 ASP.NET Core基礎(chǔ)組件 183
第8章 ASP.NET Core高級組件 243
第9章 DDD實戰(zhàn) 298
第 10章 項目案例:英語學(xué)習(xí)網(wǎng)站 359
【詳細目錄】
第 1章 .NET Core入門 1
1.1 .NET Core概述 1
1.1.1 .NET平臺的昨天 1
1.1.2 為什么要跨平臺 2
1.1.3 .NET Core 是.NET Framework的升級版嗎 2
1.1.4 .NET Framework中哪些技術(shù)不被支持 4
1.1.5 .NET Standard是什么 6
1.1.6 項目應(yīng)該使用.NET Core開發(fā)嗎 10
1.2 .NET Core 開發(fā)環(huán)境的搭建 10
1.2.1 用什么開發(fā)工具開發(fā).NET Core 11
1.2.2 .NET Core項目結(jié)構(gòu)的創(chuàng)新 11
1.3 本章小結(jié) 13
第 2章 .NET Core重難點知識 14
2.1 C#的新語法 14
2.1.1 頂級語句 14
2.1.2 全局using指令 15
2.1.3 using聲明 16
2.1.4 文件范圍的命名空間聲明 17
2.1.5 可為空的引用類型 18
2.1.6 記錄類型 20
2.2 異步編程 23
2.2.1 為什么要用異步編程 24
2.2.2 輕松上手await、async 25
2.2.3 如何編寫異步方法 27
2.2.4 async、await原理揭秘 28
2.2.5 async背后的線程切換 33
2.2.6 異步方法不等于多線程 34
2.2.7 為什么有的異步方法沒有async 36
2.2.8 異步編程的幾個重要問題 39
2.3 LINQ 40
2.3.1 Lambda表達式 41
2.3.2 常用集合類的擴展方法 43
2.3.3 LINQ的另一種寫法 51
2.4 本章小結(jié) 52
第3章 .NET Core核心基礎(chǔ)組件 53
3.1 依賴注入 53
3.1.1 什么是控制反轉(zhuǎn)、服務(wù)定位器和依賴注入 53
3.1.2 .NET Core依賴注入的基本使用 55
3.1.3 依賴注入魅力所在 57
3.2 配置系統(tǒng) 60
3.2.1 配置系統(tǒng)的基本使用 60
3.2.2 使用選項方式讀取配置 61
3.2.3 從命令行讀取配置 65
3.2.4 從環(huán)境變量讀取配置 66
3.2.5 其他配置提供程序 66
3.2.6 案例:開發(fā)自己的配置提供程序 67
3.2.7 多配置源問題 69
3.3 日志 70
3.3.1 .NET Core日志基本使用 71
3.3.2 文件日志提供程序NLog 72
3.3.3 集中式日志 73
3.4 本章小結(jié) 74
第4章 Entity Framework Core基礎(chǔ) 75
4.1 EF Core概述 75
4.1.1 什么是ORM 75
4.1.2 EF Core性能怎么樣 76
4.2 EF Core入門 76
4.2.1 該選擇什么數(shù)據(jù)庫 76
4.2.2 EF Core環(huán)境搭建 77
4.2.3 插入數(shù)據(jù) 81
4.2.4 查詢數(shù)據(jù) 82
4.2.5 修改和刪除數(shù)據(jù) 83
4.3 EF Core的實體類配置 84
4.3.1 約定大于配置 84
4.3.2 Data Annotation 85
4.3.3 Fluent API 85
4.3.4 Fluent API基本配置 86
4.3.5 Fluent API究竟流暢在哪里 88
4.3.6 主鍵類型的選擇并不簡單 89
4.4 數(shù)據(jù)庫遷移 92
4.4.1 數(shù)據(jù)庫遷移原理 92
4.4.2 其他數(shù)據(jù)庫遷移命令 95
4.4.3 反向工程(慎用) 95
4.5 查看EF Core生成的SQL語句 96
4.5.1 使用簡單日志查看SQL語句 96
4.5.2 探秘EF Core生成SQL語句的不同 97
4.6 關(guān)系配置 100
4.6.1 一對多 100
4.6.2 關(guān)聯(lián)數(shù)據(jù)的獲取 103
4.6.3 實體類對象的關(guān)聯(lián)追蹤 104
4.6.4 關(guān)系的外鍵屬性的設(shè)置 105
4.6.5 單向?qū)Ш綄傩浴?06
4.6.6 關(guān)系配置在哪個實體類中 108
4.6.7 一對一 109
4.6.8 多對多 111
4.6.9 基于關(guān)系的復(fù)雜查詢 114
4.7 本章小結(jié) 115
第5章 EF Core高級技術(shù) 116
5.1 EF Core原理揭秘 116
5.1.1 EF Core有哪些做不到的事情 116
5.1.2 既生IEnumerable,何生IQueryable 117
5.1.3 IQueryable的延遲執(zhí)行 119
5.1.4 IQueryable的復(fù)用 122
5.1.5 EF Core分頁查詢 122
5.1.6 IQueryable的底層運行 124
5.1.7 EF Core中的異步方法 126
5.1.8 如何執(zhí)行原生SQL語句 127
5.1.9 怎么知道實體類變化了 129
5.2 EF Core的性能優(yōu)化利器 131
5.2.1 EF Core優(yōu)化之AsNoTracking 131
5.2.2 實體類狀態(tài)跟蹤的妙用 132
5.2.3 Find和FindAsync方法 134
5.2.4 EF Core中高效地刪除、更新數(shù)據(jù) 134
5.2.5 全局查詢篩選器 135
5.2.6 悲觀并發(fā)控制 136
5.2.7 樂觀并發(fā)控制 138
5.3 表達式樹 142
5.3.1 什么是表達式樹 142
5.3.2 Expression和Func的區(qū)別 142
5.3.3 可視化查看表達式樹 143
5.3.4 通過代碼查看表達式樹 145
5.3.5 通過代碼動態(tài)構(gòu)建表達式樹 146
5.3.6 讓動態(tài)構(gòu)建表達式樹更簡單 148
5.3.7 讓構(gòu)建“動態(tài)”起來 149
5.3.8 不用Emit實現(xiàn)Select的動態(tài)化 152
5.3.9 避免動態(tài)構(gòu)建表達式樹 153
5.4 本章小結(jié) 154
第6章 ASP.NET Core Web API基礎(chǔ) 155
6.1 ASP.NET Core MVC項目 155
6.1.1 ASP.NET Core MVC項目的搭建 155
6.1.2 編寫第 一個MVC程序 157
6.1.3 .NET Core的新工具:熱重載 158
6.2 使用ASP.NET Core開發(fā)Web API 159
6.2.1 Web API項目的搭建 159
6.2.2 Post、Put等操作方法 161
6.3 Restful:想說愛你不容易 163
6.3.1 什么是Restful 163
6.3.2 Restful的優(yōu)缺點 165
6.3.3 Restful中如何傳遞參數(shù) 167
6.3.4 返回錯誤碼:200派與4xx派的“對決” 167
6.3.5 Restful實現(xiàn)指南 170
6.4 ASP.NET Core Web API各種技術(shù)及選擇 171
6.4.1 控制器父類用哪個 171
6.4.2 操作方法的異步、返回值、狀態(tài)碼 171
6.4.3 操作方法的參數(shù)從哪里來 173
6.5 ASP.NET Core Web API案例 176
6.5.1 開發(fā)Web API 176
6.5.2 什么是前后端分離 177
6.5.3 搭建前端開發(fā)環(huán)境 178
6.5.4 如何實現(xiàn)前后端分離開發(fā) 179
6.6 本章小結(jié) 182
第7章 ASP.NET Core基礎(chǔ)組件 183
7.1 ASP.NET Core中的依賴注入 183
7.1.1 對象注入的代碼寫到哪里 183
7.1.2 低使用頻率服務(wù)的另類注入方式 185
7.1.3 案例:開發(fā)模塊化的服務(wù)注冊框架 185
7.2 配置系統(tǒng)與ASP.NET Core的集成 188
7.2.1 默認添加的配置提供者 188
7.2.2 ASP.NET Core的多環(huán)境設(shè)置 188
7.2.3 用“用戶機密”來避免機密信息的泄露 190
7.2.4 案例:配置系統(tǒng)綜合 191
7.3 EF Core與ASP.NET Core的集成 193
7.3.1 分層項目中EF Core的用法 193
7.3.2 使用“上下文池”時要謹慎 197
7.3.3 案例:批量注冊上下文 197
7.4 性能優(yōu)化“萬金油”:緩存 198
7.4.1 什么是緩存 198
7.4.2 客戶端響應(yīng)緩存 200
7.4.3 服務(wù)器端響應(yīng)緩存 202
7.4.4 內(nèi)存緩存 204
7.4.5 緩存穿透問題的規(guī)避 211
7.4.6 緩存雪崩問題的規(guī)避 212
7.4.7 緩存數(shù)據(jù)混亂的規(guī)避 213
7.4.8 案例:封裝內(nèi)存緩存操作的幫助類 213
7.4.9 分布式緩存 215
7.4.10 案例:封裝分布式緩存操作 的幫助類 219
7.4.11 緩存方式的選擇 221
7.5 篩選器 221
7.5.1 異常篩選器 222
7.5.2 操作篩選器基礎(chǔ) 224
7.5.3 案例:自動啟用事務(wù)的操作篩選器 226
7.5.4 案例:開發(fā)請求限流器 228
7.6 中間件 229
7.6.1 什么是中間件 229
7.6.2 中間件的3個概念 230
7.6.3 簡單演示中間件 231
7.6.4 案例:自己動手模仿Web API框架 235
7.6.5 調(diào)整內(nèi)置中間件的順序,結(jié)果大不同 237
7.6.6 案例:Markdown轉(zhuǎn)換器中間件 238
7.6.7 篩選器與中間件的區(qū)別 241
7.7 本章小結(jié) 242
第8章 ASP.NET Core高級組件 243
8.1 Authentication與Authorization 243
8.1.1 標(biāo)識框架 244
8.1.2 實現(xiàn)密碼的重置 250
8.1.3 代替Session(會話)的JWT 251
8.1.4 JWT的基本使用 253
8.1.5 ASP.NET Core對于JWT的封裝 257
8.1.6 [Authorize]的注意事項 259
8.1.7 讓Swagger中調(diào)試帶驗證的請求更簡單 260
8.1.8 解決JWT無法提前撤回的難題 261
8.1.9 總結(jié) 265
8.2 利用托管服務(wù)執(zhí)行后臺代碼 265
8.2.1 托管服務(wù)的基本使用 265
8.2.2 托管服務(wù)中使用依賴注入的陷阱 267
8.2.3 案例:數(shù)據(jù)的定時導(dǎo)出 267
8.3 請求數(shù)據(jù)的校驗 269
8.3.1 .NET Core內(nèi)置數(shù)據(jù)校驗的不足 269
8.3.2 FluentValidation的基本使用 270
8.3.3 FluentValidation中注入服務(wù) 271
8.4 SignalR服務(wù)器端消息推送 272
8.4.1 SignalR基本使用 273
8.4.2 協(xié)議協(xié)商 276
8.4.3 SignalR分布式部署 279
8.4.4 SignalR身份認證 280
8.4.5 針對部分客戶端的消息推送 283
8.4.6 在外部向集線器推送消息 286
8.4.7 案例:導(dǎo)入英漢詞典到數(shù)據(jù)庫并顯示進度 288
8.4.8 SignalR實踐指南 291
8.5 ASP.NET Core系統(tǒng)的部署 291
8.5.1 ASP.NET Core網(wǎng)站的發(fā)布 292
8.5.2 網(wǎng)站部署需要注意的幾個問題 293
8.5.3 如何構(gòu)建一個安全的系統(tǒng) 296
8.6 本章小結(jié) 297
第9章 DDD實戰(zhàn) 298
9.1 架構(gòu)設(shè)計的術(shù)與道 298
9.1.1 架構(gòu)設(shè)計之怪現(xiàn)狀 298
9.1.2 架構(gòu)是進化而來的 299
9.2 DDD的基本概念 300
9.2.1 什么是微服務(wù) 300
9.2.2 微服務(wù)架構(gòu)的誤區(qū) 301
9.2.3 DDD為什么難學(xué) 302
9.2.4 領(lǐng)域與領(lǐng)域模型 304
9.2.5 通用語言與界限上下文 305
9.2.6 實體類與值對象 306
9.2.7 聚合與聚合根 307
9.2.8 領(lǐng)域服務(wù)與應(yīng)用服務(wù) 308
9.2.9 領(lǐng)域事件與集成事件 308
9.3 DDD的技術(shù)落地 311
9.3.1 貧血模型與充血模型 311
9.3.2 EF Core對實體類屬性操作的秘密 315
9.3.3 EF Core中實現(xiàn)充血模型 317
9.3.4 EF Core中實現(xiàn)值對象 321
9.3.5 案例:構(gòu)建表達式樹,簡化值對象的比較 325
9.3.6 千萬不要面向數(shù)據(jù)庫建!326
9.3.7 聚合在.NET中的實現(xiàn) 326
9.3.8 用MediatR實現(xiàn)領(lǐng)域事件 327
9.3.9 EF Core中發(fā)布領(lǐng)域事件的合適時機 329
9.3.10 RabbitMQ的基本使用 335
9.3.11 案例:簡化集成事件的框架 338
9.3.12 案例:Zack.EventBus源代碼 講解 342
9.3.13 整潔架構(gòu)(洋蔥架構(gòu)) 343
9.4 DDD案例實戰(zhàn):用戶管理及登錄 344
9.4.1 實現(xiàn)整潔架構(gòu)項目分層 344
9.4.2 領(lǐng)域模型的實現(xiàn) 346
9.4.3 領(lǐng)域服務(wù)的實現(xiàn) 349
9.4.4 基礎(chǔ)設(shè)施的實現(xiàn) 352
9.4.5 工作單元的實現(xiàn) 354
9.4.6 應(yīng)用服務(wù)層的實現(xiàn) 356
9.5 本章小結(jié) 358
第 10章 項目案例:英語學(xué)習(xí)網(wǎng)站 359
10.1 需求說明及項目演示 359
10.1.1 網(wǎng)站需求說明 359
10.1.2 網(wǎng)站結(jié)構(gòu)說明 360
10.1.3 項目結(jié)構(gòu)說明 361
10.1.4 項目運行環(huán)境搭建 362
10.1.5 主要功能演示 364
10.2 文件服務(wù)的開發(fā) 367
10.2.1 開發(fā)文件服務(wù)的領(lǐng)域?qū)印?67
10.2.2 開發(fā)文件服務(wù)的基礎(chǔ) 設(shè)施層 369
10.3 認證服務(wù)的開發(fā) 371
10.3.1 開發(fā)認證服務(wù)的領(lǐng)域?qū)印?71
10.3.2 開發(fā)認證服務(wù)的基礎(chǔ) 設(shè)施層 373
10.3.3 開發(fā)認證服務(wù)的應(yīng)用服務(wù)層 373
10.4 英語聽力服務(wù)的開發(fā) 375
10.4.1 開發(fā)英語聽力服務(wù)的領(lǐng)域?qū)印?75
10.4.2 開發(fā)英語聽力服務(wù)的后臺 應(yīng)用服務(wù)層 381
10.4.3 開發(fā)英語聽力服務(wù)的前臺 應(yīng)用服務(wù)層 385
10.5 轉(zhuǎn)碼服務(wù)的開發(fā) 387
10.5.1 開發(fā)轉(zhuǎn)碼服務(wù)的領(lǐng)域?qū)印?87
10.5.2 開發(fā)轉(zhuǎn)碼服務(wù)的基礎(chǔ)設(shè)施層 389
10.5.3 開發(fā)轉(zhuǎn)碼服務(wù)的應(yīng)用服務(wù)層 390
10.6 搜索服務(wù)的實現(xiàn) 392
10.7 性能優(yōu)化的原則 394
10.8 項目總結(jié) 395
10.9 本章小結(jié) 396