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