工良出品,從零設計開發 .NET 開發框架:框架源碼和教程電子書
為什么要寫這個教程
在畢業之后,讀者寫過了大量的文章和開源項目,正是堅持一邊學習一邊輸出,所以筆者最終從一個生菜雞進化為一個熟菜雞。
在程序員的成長中,我們會在思路,如何學習、如何進步,比如要成長為一個架構師,需要具備什么樣的能力。比如說技術能力,技術能力是最核心的基礎,那么我們技術上要達到哪種程度?可以手擼框架?腳踢匯編、拳打微服務架構?
常常會有技術社區朋友和讀者進行交流,很多讀者不知道怎么學習。筆者也是,我也不知道怎么學,各類東西都在學、都在搞,還沒有確定要專門做什么,比如最近在學 AI。年輕人,總是很迷茫,未來的出路在哪里?可能是一夜暴富。
回歸正題,之所以寫這個教程,一則是筆者比較喜歡將技術、思考、知識都沉淀到代碼和文檔中,同時基于開源精神,與大家分享這些東西,所以花了很多時間,編寫這個開源項目和技術文檔。筆者常常會編寫一系列比較長的文章、電子書,因為長系列的教程可以獲得完整、系統的知識,而短小、零散的文章不利于讀者學習、歸納知識。寫長文章是很累的,而教程完全開源,所以喜歡本系列教程的讀者們,不妨到倉庫點亮一顆星星。
轉載請保留出處。
關于從零設計 .NET 開發框架
作者:癡者工良
倉庫地址:https://github.com/whuanle/maomi
作者博客:
項目和教程介紹
Maomi 框架是一個簡單的、簡潔的開發框架,除了框架本身提供的功能之外,Maomi 還作為一個易于閱讀的開源項目,能夠給開發者提供設計框架的思路和代碼。
Maomi 框架目前具有模塊化和自動服務注冊、多語言、事件總線、Web 四個模塊。而整個解決方案中一共有 62 個項目,包括了日常部分框架的編寫示例,例如怎么制作類似 dotnet-dump 的診斷工具、怎么定制日志框架以及怎么寫一個日志框架、怎么使用 EMIT 寫一個 AOP、怎么使用 Roslyn 寫一個代碼編譯器、怎么設計類似 ABP 的模塊化等,還包括了單元測試。
本教程主要分為四個部分:
- 基礎知識,首先介紹開發這類框架的基礎知識,一些抽象和原理,但是不會深入探討源碼和細節,避免造成閱讀困難。
- 設計和抽象,想要開發一個框架時,不要急著寫代碼,要思考需要做什么,然后怎么抽象接口。
- 開始編碼,開始落實編碼,享受擼碼的快樂。
- 擴展技術,單元測試、性能測試、制作 nuget 包、制作工具包等等。
本教程一個有六十多個項目,每篇文章基本都會指導讀者如何開發對應的框架,每章都會有大量的示例,并且這些示例都可以在倉庫中找到,避免讀者閱讀文章源碼時,不知道怎么創建項目和跑示例,讀者可以直接下載倉庫源碼示例慢慢調試、理解代碼。
如果你想從零編寫一個自己的開發框架,那么本教程非常適合你,本教程囊括了 .NET 開發中常見的各類框架知識以及實現原理,每一章都是的一部分,可以只挑感興趣的部分看,希望可以幫助你學習、了解怎么編寫各類框架。
以下是教程目錄:
-
講解 Maomi.Core 的使用方法和基本原理
-
講解 Maomi.Core 是如何設計和實現,我們想開發一個框架時,怎么從設計、抽象、編碼到最后實現。講解了模塊化和自動服務注冊的原理,如何從零開發,最后制作 nuget 包,分發到 nuget.org 給所有人使用。
-
介紹故障診斷的一些方法,以及 .NET 中的日志抽象接口。
-
如何自己設計、開發一個日志框架。
-
非常推薦閱讀,介紹了 Serilog 的配置、使用方法,介紹了生命周期作用域、屬性、日志模板等相關說明,以便在程序運行時,輸出非常高效的日志,為排查問題帶來方便。很多開發者使用日志都很敷衍,不知道怎么利用好日志工具,那么這篇文章可以幫到你。
-
介紹一些 .NET 診斷的方法和原理,然后介紹如何開發 dotnet-trace、dotnet-counters、dotnet-dump 等這樣的工具,沒錯,我們也可以寫出這樣的工具!
-
簡述了 IConfiguration 、Options 的原理和使用方法,自定義配置提供器、使用 signalR 實現一個配置中心。
-
本章的內容比較豐富,講解了 .NET 下序列化和反序列化的一些特征、自定義配置、使用技巧,如何自定義枚舉轉換器、字符串轉換器、時間格式轉換器等,詳細講解了實現細節。最后介紹了 Utf8JsonReader 和怎么編寫性能測試代碼,通過 Utf8JsonReader 解析 json 的示例,讓讀者掌握原理,在后續章節中,還會介紹如何使用 Utf8JsonReader 實現多語言等基礎能力。
-
本章內容比較豐富,首先介紹 Maomi.I18n 框架的使用方法,ASP.NET Core 是怎么識別多語言請求和使用多語言的,了解 i18n 框架需要做什么,然后開始設計抽象、編寫實現代碼。編寫框架完畢后,還需要編寫單元測試,筆者介紹了如何編寫單元測試。接著介紹了如何基于 Redis 實現多語言,最后介紹如何在 nuget 包中打包多語言文件與他人共享。
-
本章內容詳細介紹了 HttpClient 的使用方法,除了基礎知識外,還包括比如請求參數、請求憑證、異常處理,接著詳細介紹了 IHttpClientFactory ,包括請求攔截、請求策略(重試、超時)等技術。介紹了 Refit 工具的使用方法,如何在業務開發中使用 Refit 快速生成 http 請求代碼,簡化開發過程。最后介紹如何自己編寫一個類似 curl 的工具,掌握使用 .NET 編寫命令行工具的技術和技巧。
-
事件總線是 DDD 開發中最常用的解耦通訊手段,所以本章會帶著讀者從零設計一個事件總線框架,從抽象設計到編寫,講解了每個環節的原理和實現代碼。事件總線中會使用到反射、委托、表達式樹等技術,如果你對表達式樹不了解,沒關系,先照著做、按照教程學,不需要死扣技術細節,只需要掌握大體設計和開發思路即可。
-
本章內容比較豐富,講解了 EMIT 技術和如何開發 AOP 框架,表達式樹的兩種使用方法、編寫對象映射框架、簡單的 ORM 框架,介紹 Roslyn 技術、代碼生成和編譯、Natasha 框架的簡單使用,最后介紹了 Source Generators (簡稱 sg 技術)實現代碼生成。
限于篇幅,本章不會過隙討論各種技術,如果讀者需要打好基礎,可以參考筆者其它電子書:
反射基礎: https://reflect.whuanle.cn/
表達式樹基礎:https://ex.whuanle.cn
-
本章內容比較豐富,日常開發中大家都會定制 Web 框架,以使用企業內部需求,那么本章介紹了開發中比較常見的東西,以及如何定制它,比如模型驗證是怎么實現的、如何自定義模型驗證器、模型驗證器中使用 i18n,各種篩選器的使用方法和技巧、定制開發篩選器(Action 篩選器、資源篩選器、異常篩選器),Swagger 定制(模型類屬性類型轉換、接口分組、接口版本號、微服務路由后綴)等。
-
詳細介紹了 Maomi.Mapper 的使用方法。

浙公網安備 33010602011771號