ASP.NET Core技術(shù)內(nèi)幕與項(xiàng)目實(shí)戰(zhàn)
定 價(jià):119 元
- 作者:楊中科
- 出版時(shí)間:2022/6/1
- ISBN:9787115586575
- 出 版 社:人民郵電出版社
- 中圖法分類:TP393.092.2
- 頁碼:396
- 紙張:
- 版次:01
- 開本:16開
本書講解.NET平臺(tái)下的異步編程、LINQ、依賴注入、配置系統(tǒng)、日志等相關(guān)技術(shù)的原理與應(yīng)用;深入且全面地介紹Entity Framework Core在項(xiàng)目中的應(yīng)用場(chǎng)景,剖析Entity Framework Core的實(shí)現(xiàn)原理。本書在講解使用ASP.NET Core進(jìn)行Web API開發(fā)的同時(shí),結(jié)合作者的實(shí)踐經(jīng)驗(yàn)介紹REST、前后端分離等編程理念在ASP.NET Core中的實(shí)現(xiàn)。此外,本書還會(huì)介紹領(lǐng)域驅(qū)動(dòng)設(shè)計(jì)(DDD)的理念,并且通過來自項(xiàng)目開發(fā)一線的案例講解DDD理念在項(xiàng)目中的技術(shù)落地方案。最后,本書通過真實(shí)的英語學(xué)習(xí)網(wǎng)站的項(xiàng)目案例講解ASP.NET Core技術(shù)在項(xiàng)目中的應(yīng)用?傮w而言,本書不僅介紹技術(shù)的使用,而且講解技術(shù)的底層原理;不僅介紹作者在項(xiàng)目開發(fā)一線的實(shí)踐經(jīng)驗(yàn),而且講解綜合項(xiàng)目案例的具體實(shí)現(xiàn)。
本書可供具有一定編程基礎(chǔ)的開發(fā)人員學(xué)習(xí)ASP.NET Core的使用方法,也可供具有一定經(jīng)驗(yàn)的.NET開發(fā)人員了解.NET的內(nèi)部原理和學(xué)習(xí)相關(guān)項(xiàng)目實(shí)戰(zhàn)經(jīng)驗(yàn),還可作為大中專院校學(xué)生的ASP.NET Core教材。
作者說:寫一本關(guān)于.NET Core的書并不難,但是寫一本關(guān)于.NET Core的好書太難了!如果只是為了寫一本講解.NET Core的書,我只要照著微軟的官方文檔去改編一下就行了,但是這樣編出來的書有什么價(jià)值呢?微軟的.NET文檔所講的內(nèi)容已經(jīng)非常豐富了,我沒必要再去把它們重復(fù)一遍。我需要講解微軟文檔中沒有講到的內(nèi)容,讀者也需要這樣一本書:
> 講解相關(guān)技術(shù)背后的原理;
> 講解相關(guān)技術(shù)應(yīng)用在哪些場(chǎng)景中;
> 講解相關(guān)技術(shù)有哪些優(yōu)缺點(diǎn);
> 講解相關(guān)技術(shù)在項(xiàng)目中如何應(yīng)用;
> 講解真實(shí)項(xiàng)目的架構(gòu)和技術(shù)實(shí)現(xiàn)。
為了達(dá)成上述目標(biāo),我在編寫本書的時(shí)候做了大量的底層源代碼的研究工作。比如,在講解“異步編程”的時(shí)候,我翻閱了.NET中異步編程的源代碼,從而幫助讀者更好地理解和應(yīng)用異步編程;又如,在講解“表達(dá)式樹”的時(shí)候,我翻閱了EF Core的表達(dá)式樹翻譯引擎,并且編寫了一個(gè)關(guān)于翻譯引擎的開源項(xiàng)目,以幫助讀者理解“表達(dá)式樹”的底層原理。
項(xiàng)目中很多技術(shù)的講解需要基于具有一定深度的實(shí)踐應(yīng)用案例,這樣才能避免技術(shù)的講解流于表面,因此我在本書中編入了很多具有深度的案例。比如,在講解依賴注入的時(shí)候,我通過開發(fā)一個(gè)自己的配置系統(tǒng)、日志系統(tǒng)講解依賴注入是如何把系統(tǒng)組件裝配在一起的;又如,在講解ASP.NET Core中間件的時(shí)候,我編寫了一個(gè)模仿ASP.NET Core Web API的框架,為讀者講解中間件的實(shí)際應(yīng)用。
特別說明:
□ 關(guān)于配套資源
鑒于篇幅受限,作者不能把本書每個(gè)案例的每一行代碼都寫到書中,即書中的代碼都是關(guān)鍵代碼。如果讀者想要本書配套的全部代碼,則可通過人郵教育社區(qū)(www.ryjiaoyu.com)中的本書所在頁面進(jìn)行獲取。
□ 關(guān)于視頻教程
本書還贈(zèng)送讀者配套視頻教程。在視頻教程中,作者從與圖書不同的角度對(duì)技術(shù)進(jìn)行詮釋。讀者結(jié)合視頻教程學(xué)習(xí)本書,效果會(huì)更好。讀者可以通過嗶哩嗶哩搜索“楊中科”以觀看相關(guān)視頻教程,也可通過人郵教育社區(qū)下載相關(guān)視頻教程。
□ 遇到問題怎么辦
讀者可以添加作者微信“yzk10240124”以與作者進(jìn)行交流,同時(shí)可以將您針對(duì)本書的修改建議與意見反饋給作者。同時(shí),關(guān)于本書的勘誤與答疑,以及新版功能免費(fèi)博客等內(nèi)容,讀者也可以通過讀者微信進(jìn)行了解。祝您學(xué)習(xí)愉快!
楊中科:
.NET方向微軟MVP,擁有約30萬粉絲以及近18年的IT行業(yè)軟件開發(fā)工作經(jīng)驗(yàn),擅長(zhǎng)軟件架構(gòu)設(shè)計(jì)與底層框架研究,具有應(yīng)用.NET、Java、Python、C等的豐富經(jīng)驗(yàn),編寫的技術(shù)文章和錄制的視頻教程深入淺出、通俗易懂、備受好評(píng);同時(shí),出版了多部?jī)?yōu)秀的軟件開發(fā)技術(shù)圖書。
【章名目錄】
第 1章 .NET Core入門 1
第 2章 .NET Core重難點(diǎn)知識(shí) 14
第3章 .NET Core核心基礎(chǔ)組件 53
第4章 Entity Framework Core基礎(chǔ) 75
第5章 EF Core高級(jí)技術(shù) 116
第6章 ASP.NET Core Web API基礎(chǔ) 155
第7章 ASP.NET Core基礎(chǔ)組件 183
第8章 ASP.NET Core高級(jí)組件 243
第9章 DDD實(shí)戰(zhàn) 298
第 10章 項(xiàng)目案例:英語學(xué)習(xí)網(wǎng)站 359
【詳細(xì)目錄】
第 1章 .NET Core入門 1
1.1 .NET Core概述 1
1.1.1 .NET平臺(tái)的昨天 1
1.1.2 為什么要跨平臺(tái) 2
1.1.3 .NET Core 是.NET Framework的升級(jí)版嗎 2
1.1.4 .NET Framework中哪些技術(shù)不被支持 4
1.1.5 .NET Standard是什么 6
1.1.6 項(xiàng)目應(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項(xiàng)目結(jié)構(gòu)的創(chuàng)新 11
1.3 本章小結(jié) 13
第 2章 .NET Core重難點(diǎn)知識(shí) 14
2.1 C#的新語法 14
2.1.1 頂級(jí)語句 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 異步編程的幾個(gè)重要問題 39
2.3 LINQ 40
2.3.1 Lambda表達(dá)式 41
2.3.2 常用集合類的擴(kuò)展方法 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 使用選項(xiàng)方式讀取配置 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ù)庫(kù) 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的實(shí)體類配置 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 主鍵類型的選擇并不簡(jiǎn)單 89
4.4 數(shù)據(jù)庫(kù)遷移 92
4.4.1 數(shù)據(jù)庫(kù)遷移原理 92
4.4.2 其他數(shù)據(jù)庫(kù)遷移命令 95
4.4.3 反向工程(慎用) 95
4.5 查看EF Core生成的SQL語句 96
4.5.1 使用簡(jiǎn)單日志查看SQL語句 96
4.5.2 探秘EF Core生成SQL語句的不同 97
4.6 關(guān)系配置 100
4.6.1 一對(duì)多 100
4.6.2 關(guān)聯(lián)數(shù)據(jù)的獲取 103
4.6.3 實(shí)體類對(duì)象的關(guān)聯(lián)追蹤 104
4.6.4 關(guān)系的外鍵屬性的設(shè)置 105
4.6.5 單向?qū)Ш綄傩浴?06
4.6.6 關(guān)系配置在哪個(gè)實(shí)體類中 108
4.6.7 一對(duì)一 109
4.6.8 多對(duì)多 111
4.6.9 基于關(guān)系的復(fù)雜查詢 114
4.7 本章小結(jié) 115
第5章 EF Core高級(jí)技術(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的底層運(yùn)行 124
5.1.7 EF Core中的異步方法 126
5.1.8 如何執(zhí)行原生SQL語句 127
5.1.9 怎么知道實(shí)體類變化了 129
5.2 EF Core的性能優(yōu)化利器 131
5.2.1 EF Core優(yōu)化之AsNoTracking 131
5.2.2 實(shí)體類狀態(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 表達(dá)式樹 142
5.3.1 什么是表達(dá)式樹 142
5.3.2 Expression和Func的區(qū)別 142
5.3.3 可視化查看表達(dá)式樹 143
5.3.4 通過代碼查看表達(dá)式樹 145
5.3.5 通過代碼動(dòng)態(tài)構(gòu)建表達(dá)式樹 146
5.3.6 讓動(dòng)態(tài)構(gòu)建表達(dá)式樹更簡(jiǎn)單 148
5.3.7 讓構(gòu)建“動(dòng)態(tài)”起來 149
5.3.8 不用Emit實(shí)現(xiàn)Select的動(dòng)態(tài)化 152
5.3.9 避免動(dòng)態(tài)構(gòu)建表達(dá)式樹 153
5.4 本章小結(jié) 154
第6章 ASP.NET Core Web API基礎(chǔ) 155
6.1 ASP.NET Core MVC項(xiàng)目 155
6.1.1 ASP.NET Core MVC項(xiàng)目的搭建 155
6.1.2 編寫第 一個(gè)MVC程序 157
6.1.3 .NET Core的新工具:熱重載 158
6.2 使用ASP.NET Core開發(fā)Web API 159
6.2.1 Web API項(xiàng)目的搭建 159
6.2.2 Post、Put等操作方法 161
6.3 Restful:想說愛你不容易 163
6.3.1 什么是Restful 163
6.3.2 Restful的優(yōu)缺點(diǎn) 165
6.3.3 Restful中如何傳遞參數(shù) 167
6.3.4 返回錯(cuò)誤碼:200派與4xx派的“對(duì)決” 167
6.3.5 Restful實(shí)現(xiàn)指南 170
6.4 ASP.NET Core Web API各種技術(shù)及選擇 171
6.4.1 控制器父類用哪個(gè) 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 如何實(shí)現(xiàn)前后端分離開發(fā) 179
6.6 本章小結(jié) 182
第7章 ASP.NET Core基礎(chǔ)組件 183
7.1 ASP.NET Core中的依賴注入 183
7.1.1 對(duì)象注入的代碼寫到哪里 183
7.1.2 低使用頻率服務(wù)的另類注入方式 185
7.1.3 案例:開發(fā)模塊化的服務(wù)注冊(cè)框架 185
7.2 配置系統(tǒng)與ASP.NET Core的集成 188
7.2.1 默認(rèn)添加的配置提供者 188
7.2.2 ASP.NET Core的多環(huán)境設(shè)置 188
7.2.3 用“用戶機(jī)密”來避免機(jī)密信息的泄露 190
7.2.4 案例:配置系統(tǒng)綜合 191
7.3 EF Core與ASP.NET Core的集成 193
7.3.1 分層項(xiàng)目中EF Core的用法 193
7.3.2 使用“上下文池”時(shí)要謹(jǐn)慎 197
7.3.3 案例:批量注冊(cè)上下文 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 案例:自動(dòng)啟用事務(wù)的操作篩選器 226
7.5.4 案例:開發(fā)請(qǐng)求限流器 228
7.6 中間件 229
7.6.1 什么是中間件 229
7.6.2 中間件的3個(gè)概念 230
7.6.3 簡(jiǎn)單演示中間件 231
7.6.4 案例:自己動(dòng)手模仿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高級(jí)組件 243
8.1 Authentication與Authorization 243
8.1.1 標(biāo)識(shí)框架 244
8.1.2 實(shí)現(xiàn)密碼的重置 250
8.1.3 代替Session(會(huì)話)的JWT 251
8.1.4 JWT的基本使用 253
8.1.5 ASP.NET Core對(duì)于JWT的封裝 257
8.1.6 [Authorize]的注意事項(xiàng) 259
8.1.7 讓Swagger中調(diào)試帶驗(yàn)證的請(qǐng)求更簡(jiǎn)單 260
8.1.8 解決JWT無法提前撤回的難題 261
8.1.9 總結(jié) 265
8.2 利用托管服務(wù)執(zhí)行后臺(tái)代碼 265
8.2.1 托管服務(wù)的基本使用 265
8.2.2 托管服務(wù)中使用依賴注入的陷阱 267
8.2.3 案例:數(shù)據(jù)的定時(shí)導(dǎo)出 267
8.3 請(qǐng)求數(shù)據(jù)的校驗(yàn) 269
8.3.1 .NET Core內(nèi)置數(shù)據(jù)校驗(yàn)的不足 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身份認(rèn)證 280
8.4.5 針對(duì)部分客戶端的消息推送 283
8.4.6 在外部向集線器推送消息 286
8.4.7 案例:導(dǎo)入英漢詞典到數(shù)據(jù)庫(kù)并顯示進(jìn)度 288
8.4.8 SignalR實(shí)踐指南 291
8.5 ASP.NET Core系統(tǒng)的部署 291
8.5.1 ASP.NET Core網(wǎng)站的發(fā)布 292
8.5.2 網(wǎng)站部署需要注意的幾個(gè)問題 293
8.5.3 如何構(gòu)建一個(gè)安全的系統(tǒng) 296
8.6 本章小結(jié) 297
第9章 DDD實(shí)戰(zhàn) 298
9.1 架構(gòu)設(shè)計(jì)的術(shù)與道 298
9.1.1 架構(gòu)設(shè)計(jì)之怪現(xiàn)狀 298
9.1.2 架構(gòu)是進(jìn)化而來的 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 實(shí)體類與值對(duì)象 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對(duì)實(shí)體類屬性操作的秘密 315
9.3.3 EF Core中實(shí)現(xiàn)充血模型 317
9.3.4 EF Core中實(shí)現(xiàn)值對(duì)象 321
9.3.5 案例:構(gòu)建表達(dá)式樹,簡(jiǎn)化值對(duì)象的比較 325
9.3.6 千萬不要面向數(shù)據(jù)庫(kù)建!326
9.3.7 聚合在.NET中的實(shí)現(xiàn) 326
9.3.8 用MediatR實(shí)現(xiàn)領(lǐng)域事件 327
9.3.9 EF Core中發(fā)布領(lǐng)域事件的合適時(shí)機(jī) 329
9.3.10 RabbitMQ的基本使用 335
9.3.11 案例:簡(jiǎn)化集成事件的框架 338
9.3.12 案例:Zack.EventBus源代碼 講解 342
9.3.13 整潔架構(gòu)(洋蔥架構(gòu)) 343
9.4 DDD案例實(shí)戰(zhàn):用戶管理及登錄 344
9.4.1 實(shí)現(xiàn)整潔架構(gòu)項(xiàng)目分層 344
9.4.2 領(lǐng)域模型的實(shí)現(xiàn) 346
9.4.3 領(lǐng)域服務(wù)的實(shí)現(xiàn) 349
9.4.4 基礎(chǔ)設(shè)施的實(shí)現(xiàn) 352
9.4.5 工作單元的實(shí)現(xiàn) 354
9.4.6 應(yīng)用服務(wù)層的實(shí)現(xiàn) 356
9.5 本章小結(jié) 358
第 10章 項(xiàng)目案例:英語學(xué)習(xí)網(wǎng)站 359
10.1 需求說明及項(xiàng)目演示 359
10.1.1 網(wǎng)站需求說明 359
10.1.2 網(wǎng)站結(jié)構(gòu)說明 360
10.1.3 項(xiàng)目結(jié)構(gòu)說明 361
10.1.4 項(xiàng)目運(yùn)行環(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 認(rèn)證服務(wù)的開發(fā) 371
10.3.1 開發(fā)認(rèn)證服務(wù)的領(lǐng)域?qū)印?71
10.3.2 開發(fā)認(rèn)證服務(wù)的基礎(chǔ) 設(shè)施層 373
10.3.3 開發(fā)認(rèn)證服務(wù)的應(yīng)用服務(wù)層 373
10.4 英語聽力服務(wù)的開發(fā) 375
10.4.1 開發(fā)英語聽力服務(wù)的領(lǐng)域?qū)印?75
10.4.2 開發(fā)英語聽力服務(wù)的后臺(tái) 應(yīng)用服務(wù)層 381
10.4.3 開發(fā)英語聽力服務(wù)的前臺(tái) 應(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ù)的實(shí)現(xiàn) 392
10.7 性能優(yōu)化的原則 394
10.8 項(xiàng)目總結(jié) 395
10.9 本章小結(jié) 396