基礎(chǔ)階段:從最簡單的示例代碼開始,創(chuàng)建一個非常簡單Demo。
進(jìn)階階段:編寫代碼的同時,輕松學(xué)習(xí)掌握核心點(diǎn)的實(shí)現(xiàn)。
原理階段:抽絲剝繭,通過源碼,讓你了解不同模塊內(nèi)部的原理。
實(shí)踐階段:對章節(jié)的內(nèi)容做更深入的理解和研究,創(chuàng)建自定義具有擴(kuò)展的模塊。
推 薦 序
第一次和馮輝接觸是幾年前他邀請我參加濟(jì)南.NET 俱樂部的活動,當(dāng)時我因工作原因未能赴約,到現(xiàn)在仍深感遺憾。在年初的時候得知他正在撰寫一本講解.NET 框架的書,又有幸被邀請為該書寫序,在忐忑之余,我也想借這個機(jī)會介紹一下自己在.NET 這條路的心路歷程供讀者參考。
在編程道路上,有兩件事對我產(chǎn)生過很大的影響。第一件事可以追溯到 10 年前我第一次接觸編程時,當(dāng)時我使用.NET 中的 XNA 框架和 WP 框架開發(fā)了我的第一款手機(jī) RPG 游戲并在 Lumia 820 上運(yùn)行。這次成功開發(fā)游戲的經(jīng)歷極大地增強(qiáng)了我對從事編程的信心和對.NET 的興趣。之后因?yàn)楣ぷ鞯男枰,我?WPF、WCF 和 ASP.NET 等不同方向的.NET 技術(shù)都有所涉獵。第二件事可以追溯到 Microsoft 宣布第一個開源的.NET 版本 ASP .NET VNext時,當(dāng)時我就對 VNext 產(chǎn)生了極大的興趣。在學(xué)習(xí)和推廣 VNext 時,我結(jié)識了 Alex LEWIS、He Zhenxi、Xie Yang 等好友,之后我們一起創(chuàng)建了 NCC(.NET Core Community)社區(qū)。
最初,.NET Core 提供英文文檔作為為數(shù)不多的使用參考,所以 NCC 社區(qū)剛剛成立時,我們做的第一件事是翻譯ASP.NET Core 最初版本的英文文檔。得益于Microsoft的開源策略,學(xué)習(xí).NET Core 的另一個途徑就是閱讀 GitHub 官網(wǎng)上的源代碼,我也由此養(yǎng)成了閱讀開源項目代碼的習(xí)慣,并且受益至今。受萬物皆Services并且完全管道化的 ASP.NET Core 框架的啟發(fā),我設(shè)計了 AspectCore AOP 庫,也在從事云原生開發(fā)之后在 Go 語言上繼續(xù)參考ASP.NET Core 實(shí)現(xiàn)了以依賴注入作為內(nèi)核的模塊化開發(fā)框架。
即使對 .NET Core 已經(jīng)相對熟悉,我在閱讀本書樣稿之后還是感覺眼前一亮。本書由淺入深地介紹了.NET Core 框架的核心部分,如依賴注入、配置與選項、中間件、緩存、日志、多線程等。我相信,不管是.NET Core 的初學(xué)者,還是想要繼續(xù)進(jìn)階的中高級開發(fā)工程師,都能從這本書中獲得很大的幫助。
近幾年技術(shù)浪潮興替,從大數(shù)據(jù)、移動互聯(lián)網(wǎng)、云計算技術(shù)的興起,再到如今人工智能、云原生技術(shù)的流行,.NET Core 完成了從運(yùn)行時、BCL(Base Class Library,基礎(chǔ)類庫)到開發(fā)框架的一系列蛻變。得益于分層編譯、重新實(shí)現(xiàn)的集合類、Span、網(wǎng)絡(luò)/文件 I/O 等諸多細(xì)節(jié)的優(yōu)化,.NET Core 不僅在最新幾輪的 TechEmpower 性能評測中名列前茅,還可以搭配 C#,使.NET Core 成為事實(shí)上的云原生應(yīng)用開發(fā)的最佳平臺之一。謹(jǐn)以此序和同為.NET Core 的使用者及愛好者共勉之。
Apache SkyWalking PMC、NCC 社區(qū)創(chuàng)始人 劉浩楊
2022 年 8 月于杭州
前言
隨著.NET 技術(shù)的發(fā)展,涌現(xiàn)出眾多的設(shè)計思想和核心概念。值得開發(fā)人員關(guān)注的技術(shù)點(diǎn)有很多,如 ASP.NET Core 模塊的設(shè)計、跨平臺調(diào)試與部署等。
.NET 已經(jīng)成為一種熱門的現(xiàn)代技術(shù)體系,從.NET 徹底邁向跨平臺和開源開始,已經(jīng)歷經(jīng)了約 10 個版本。新一代的.NET 平臺以擁抱云原生為核心,擁有更小的體積、更少的資源占用和更快的啟動速度,并且支持水平擴(kuò)展。
筆者也算是一個親歷者,從.NET Core 1.0 到現(xiàn)在,是一個從重生到繁榮的成長階段,.NET 生態(tài)更加開放,開源社區(qū)越來越活躍,不僅支持傳統(tǒng)的 x86 架構(gòu)體系,還支持ARM 架構(gòu),并且獲得了龍芯 LoongArch 架構(gòu)及諸多新興架構(gòu)體系的踴躍支持,同時在工業(yè)、IoT、車聯(lián)網(wǎng)等領(lǐng)域獲得了廣泛運(yùn)用。無論是從社區(qū)參與度,還是從 NuGet 的下載量,都不難看出.NET 的發(fā)展速度。
.NET 具備原生的跨平臺部署能力,是一種用于構(gòu)建多端應(yīng)用的開放平臺。使用.NET 可以構(gòu)建桌面應(yīng)用、云服務(wù)、嵌入式應(yīng)用及機(jī)器學(xué)習(xí)應(yīng)用等,讀者可以從 GitHub 官網(wǎng)的 dotnet組織中獲取它所有的源代碼。
計算機(jī)科學(xué)家 Alan J. Perlis 曾說過:不能影響你的編程思維方式的語言不值得學(xué)習(xí)和使用。由此可知,思維非常重要,只有了解一門編程語言或框架的基礎(chǔ)模型與核心設(shè)計,才能將其應(yīng)用到日常的編程中。
框架的設(shè)計過程是非常復(fù)雜的,筆者偏向于將復(fù)雜問題簡單化,先研究它的實(shí)現(xiàn)方式,再了解它的設(shè)計模式,通過這一層層的推導(dǎo)過程,慢慢地了解整體脈絡(luò)。閱讀源代碼是一個枯燥但會帶來收獲的過程。在本書中,筆者將框架設(shè)計方法,以及它們的實(shí)現(xiàn)(可擴(kuò)展性)方式毫無保留地寫下來。
本書集成了筆者在工作中使用.NET 開發(fā)應(yīng)用程序的編寫經(jīng)驗(yàn)和調(diào)試經(jīng)驗(yàn),同時結(jié)合了筆者關(guān)于 Linux 平臺和容器云平臺的使用經(jīng)驗(yàn)。通過本書,筆者將介紹每個模塊的核心設(shè)計與實(shí)現(xiàn),因?yàn)橐朐谏a(chǎn)環(huán)境中大規(guī)模使用,就需要在這個復(fù)雜而龐大的項目中抓到主線,了解內(nèi)部的實(shí)現(xiàn)和調(diào)試技術(shù),以便快速定位問題和解決問題。
本書對 ASP.NET Core 的部分核心內(nèi)容進(jìn)行了深入解析,在這個基礎(chǔ)上延伸內(nèi)容,以及自定義擴(kuò)展實(shí)例,初學(xué)者可以更深入地了解 ASP.NET Core 內(nèi)部的運(yùn)作方式。本書也涵蓋了很多基礎(chǔ)知識,如垃圾回收、調(diào)試、線程等,除此之外,添加了部署方面的內(nèi)容,將應(yīng)用程序部署到宿主機(jī)、Docker 和 Kubernetes 中。
筆者通過對.NET 技術(shù)的原理進(jìn)行剖析及實(shí)例的演示,幫助讀者快速熟悉框架的核心設(shè)計及實(shí)現(xiàn)原理。希望讀者在閱讀完本書后,能夠?qū)械膬?nèi)容學(xué)以致用,使用.NET 構(gòu)建出高性能的應(yīng)用程序,同時為開源社區(qū)添磚加瓦。
關(guān)于勘誤
完成本書絕不是一件簡單的事情。雖然筆者力爭保證內(nèi)容的準(zhǔn)確性,并且花費(fèi)了很長的時間和大量的精力核對書中的文字和內(nèi)容,但個人水平有限,書中難免存在一些不足之處,望廣大讀者批評指正。歡迎發(fā)郵件至 hueifeng2020@outlook.com,期待您的反饋。
致謝
感謝鄒溪源、嚴(yán)振范、鍋美玲、李衛(wèi)涵、胡心(Azul X)、管生玄、黃新成(一線碼農(nóng))和周杰等人對本書的審核和校對,同時感謝家人、朋友和同事在筆者編寫本書期間給予的支持與鼓勵。
感謝符隆美編輯對我的悉心指導(dǎo),她對本書的審核和建議使我的寫作水平有了很大的提高,在此表示感謝!