當前位置: 妍妍網 > 碼農

工良出品,從零設計開發 .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 的使用方法。