工良出品,從零設計開發 .NET 開發框架:框架原始碼和教程電子書

痴者工良發表於2024-03-21

為什麼要寫這個教程

在畢業之後,讀者寫過了大量的文章和開源專案,正是堅持一邊學習一邊輸出,所以筆者最終從一個生菜雞進化為一個熟菜雞。

在程式設計師的成長中,我們會在思路,如何學習、如何進步,比如要成長為一個架構師,需要具備什麼樣的能力。比如說技術能力,技術能力是最核心的基礎,那麼我們技術上要達到哪種程度?可以手擼框架?腳踢彙編、拳打微服務架構?

常常會有技術社群朋友和讀者進行交流,很多讀者不知道怎麼學習。筆者也是,我也不知道怎麼學,各類東西都在學、都在搞,還沒有確定要專門做什麼,比如最近在學 AI。年輕人,總是很迷茫,未來的出路在哪裡?可能是一夜暴富。

迴歸正題,之所以寫這個教程,一則是筆者比較喜歡將技術、思考、知識都沉澱到程式碼和文件中,同時基於開源精神,與大家分享這些東西,所以花了很多時間,編寫這個開源專案和技術文件。筆者常常會編寫一系列比較長的文章、電子書,因為長系列的教程可以獲得完整、系統的知識,而短小、零散的文章不利於讀者學習、歸納知識。寫長文章是很累的,而教程完全開源,所以喜歡本系列教程的讀者們,不妨到倉庫點亮一顆星星。

轉載請保留出處。

關於從零設計 .NET 開發框架

作者:痴者工良

倉庫地址:https://github.com/whuanle/maomi

文件地址:https://maomi.whuanle.cn

作者部落格:

https://www.whuanle.cn

https://www.cnblogs.com/whuanle

專案和教程介紹

Maomi 框架是一個簡單的、簡潔的開發框架,除了框架本身提供的功能之外,Maomi 還作為一個易於閱讀的開源專案,能夠給開發者提供設計框架的思路和程式碼。

Maomi 框架目前具有模組化和自動服務註冊、多語言、事件匯流排、Web 四個模組。而整個解決方案中一共有 62 個專案,包括了日常部分框架的編寫示例,例如怎麼製作類似 dotnet-dump 的診斷工具、怎麼定製日誌框架以及怎麼寫一個日誌框架、怎麼使用 EMIT 寫一個 AOP、怎麼使用 Roslyn 寫一個程式碼編譯器、怎麼設計類似 ABP 的模組化等,還包括了單元測試。

本教程主要分為四個部分:

  • 基礎知識,首先介紹開發這類框架的基礎知識,一些抽象和原理,但是不會深入探討原始碼和細節,避免造成閱讀困難。
  • 設計和抽象,想要開發一個框架時,不要急著寫程式碼,要思考需要做什麼,然後怎麼抽象介面。
  • 開始編碼,開始落實編碼,享受擼碼的快樂。
  • 擴充套件技術,單元測試、效能測試、製作 nuget 包、製作工具包等等。

本教程一個有六十多個專案,每篇文章基本都會指導讀者如何開發對應的框架,每章都會有大量的示例,並且這些示例都可以在倉庫中找到,避免讀者閱讀文章原始碼時,不知道怎麼建立專案和跑示例,讀者可以直接下載倉庫原始碼示例慢慢除錯、理解程式碼。

如果你想從零編寫一個自己的開發框架,那麼本教程非常適合你,本教程囊括了 .NET 開發中常見的各類框架知識以及實現原理,每一章都是的一部分,可以只挑感興趣的部分看,希望可以幫助你學習、瞭解怎麼編寫各類框架。

以下是教程目錄:

  • 1.模組化和自動服務註冊

    講解 Maomi.Core 的使用方法和基本原理

  • 2.模組化和自動服務註冊的設計和實現

    講解 Maomi.Core 是如何設計和實現,我們想開發一個框架時,怎麼從設計、抽象、編碼到最後實現。講解了模組化和自動服務註冊的原理,如何從零開發,最後製作 nuget 包,分發到 nuget.org 給所有人使用。

  • 3.故障診斷和日誌

    介紹故障診斷的一些方法,以及 .NET 中的日誌抽象介面。

  • 3.1.自定義開發日誌框架

    如何自己設計、開發一個日誌框架。

  • 3.2. .NET 日誌使用技巧

    非常推薦閱讀,介紹了 Serilog 的配置、使用方法,介紹了生命週期作用域、屬性、日誌模板等相關說明,以便在程式執行時,輸出非常高效的日誌,為排查問題帶來方便。很多開發者使用日誌都很敷衍,不知道怎麼利用好日誌工具,那麼這篇文章可以幫到你。

  • 3.3.開發 .NET 診斷工具

    介紹一些 .NET 診斷的方法和原理,然後介紹如何開發 dotnet-trace、dotnet-counters、dotnet-dump 等這樣的工具,沒錯,我們也可以寫出這樣的工具!

  • 4.配置和選項

    簡述了 IConfiguration 、Options 的原理和使用方法,自定義配置提供器、使用 signalR 實現一個配置中心。

  • 5.NET 中的序列化和反序列化

    本章的內容比較豐富,講解了 .NET 下序列化和反序列化的一些特徵、自定義配置、使用技巧,如何自定義列舉轉換器、字串轉換器、時間格式轉換器等,詳細講解了實現細節。最後介紹了 Utf8JsonReader 和怎麼編寫效能測試程式碼,透過 Utf8JsonReader 解析 json 的示例,讓讀者掌握原理,在後續章節中,還會介紹如何使用 Utf8JsonReader 實現多語言等基礎能力。

  • 6.多語言

    本章內容比較豐富,首先介紹 Maomi.I18n 框架的使用方法,ASP.NET Core 是怎麼識別多語言請求和使用多語言的,瞭解 i18n 框架需要做什麼,然後開始設計抽象、編寫實現程式碼。編寫框架完畢後,還需要編寫單元測試,筆者介紹瞭如何編寫單元測試。接著介紹瞭如何基於 Redis 實現多語言,最後介紹如何在 nuget 包中打包多語言檔案與他人共享。

  • 7.http 應用開發

    本章內容詳細介紹了 HttpClient 的使用方法,除了基礎知識外,還包括比如請求引數、請求憑證、異常處理,接著詳細介紹了 IHttpClientFactory ,包括請求攔截、請求策略(重試、超時)等技術。介紹了 Refit 工具的使用方法,如何在業務開發中使用 Refit 快速生成 http 請求程式碼,簡化開發過程。最後介紹如何自己編寫一個類似 curl 的工具,掌握使用 .NET 編寫命令列工具的技術和技巧。

  • 8.事件匯流排框架的設計

    事件匯流排是 DDD 開發中最常用的解耦通訊手段,所以本章會帶著讀者從零設計一個事件匯流排框架,從抽象設計到編寫,講解了每個環節的原理和實現程式碼。事件匯流排中會使用到反射、委託、表示式樹等技術,如果你對錶達式樹不瞭解,沒關係,先照著做、按照教程學,不需要死扣技術細節,只需要掌握大體設計和開發思路即可。

  • 9.動態程式碼

    本章內容比較豐富,講解了 EMIT 技術和如何開發 AOP 框架,表示式樹的兩種使用方法、編寫物件對映框架、簡單的 ORM 框架,介紹 Roslyn 技術、程式碼生成和編譯、Natasha 框架的簡單使用,最後介紹了 Source Generators (簡稱 sg 技術)實現程式碼生成。

    限於篇幅,本章不會過隙討論各種技術,如果讀者需要打好基礎,可以參考筆者其它電子書:

    反射基礎: https://reflect.whuanle.cn/

    表示式樹基礎:https://ex.whuanle.cn

  • 10.Web 框架定製開發

    本章內容比較豐富,日常開發中大家都會定製 Web 框架,以使用企業內部需求,那麼本章介紹了開發中比較常見的東西,以及如何定製它,比如模型驗證是怎麼實現的、如何自定義模型驗證器、模型驗證器中使用 i18n,各種篩選器的使用方法和技巧、定製開發篩選器(Action 篩選器、資源篩選器、異常篩選器),Swagger 定製(模型類屬性型別轉換、介面分組、介面版本號、微服務路由字尾)等。

  • 11.物件對映框架

    詳細介紹了 Maomi.Mapper 的使用方法。

相關文章