敲了幾萬行原始碼後,我給Mybatis畫了張“全地圖”

小傅哥發表於2022-06-20

作者:小傅哥
部落格:https://bugstack.cn

沉澱、分享、成長,讓自己和他人都能有所收穫!?

一、說說:“產”後感受

?有人跟我說,手寫Spring難,手寫Mybatis易?

敲了幾萬行原始碼後,我給Mybatis畫了張“全地圖”

一股神奇的力量,讓我在手寫完 Spring 後,開始對 Mybatis 下手。最開始我也覺得 Spring 那麼大都寫下來了,Mybatis 能有多難?但隨著我開始梳理、拆解、細化,Mybatis 框架原始碼的架構模型後發現,事情沒那麼簡單

為什麼事情沒那麼簡單?因為如果說只是為了體現出一個 ORM 框架的核心結構和功能,7/8 個類就能實現出來。但假如是實現一個完整的串聯出重要核心脈絡流程的 ORM 框架,至少要在 100個類以上,才能把 Mybatis 這些功能全部串聯出來。

那為什麼幾個類就能搞定的事要,寫把開整個 Mybatis 手寫一堆的程式碼來實現呢?

其實這裡有一個非常重要的點,就是你學習原始碼的目的是什麼,是為了面試? 為了熟悉流程? 為了跟風? 其實在小傅哥看來,這些都不是學習原始碼的核心目的和期待的結果。我們學習原始碼更多的是為了學習這些原始碼在面對複雜系統問題時候,如何設計工程架構,運用了什麼設計原則和哪些設計模式,而這些運用到的思想在程式碼中又是如何落地的。

這樣的東西,才是學習原始碼應該重視的內容,而且這也是能真的幫助研發人員提高編碼思維高度的東西。所以你會看到小傅哥逐步拆解 Mybatis 核心功能模組,通過漸進式的逐步開發實現,層層展開 Mybatis 的設計和實現的神祕面紗(PS:寫過以後也不太神祕)。

二、原始碼:全貌地圖

在小傅哥手寫完 Mybatis 框架以後,梳理了一張全貌地圖,預覽整個 Mybatis 框架的執行脈絡體系。有了這張開啟了戰爭迷霧地圖的指引,再學習起來 Mybatis 的技術,也就變得非常清晰了。

小傅哥 Mybatis 框架原始碼技術全貌地圖

  • 這是整個《手寫 Mybatis》的全貌地圖,小傅哥會帶著大家逐步實現這裡面的功能模組,分章節細化各個模組的實現流程,最終讓讀者實現出一個豐富、全面、細緻的 ORM 框架。在學習的過程中,大家也可以參考這張圖來對照手寫的程式碼以及 Mybatis 的原始碼,這樣更加有利於對 Mybatis 框架的理解。
  • 通常如果你不是支離破碎的拼湊式學習,而是成體系的建設自己的知識棧,那麼你在學習後,也一定能梳理出一套關於學習過內容的技術地圖。

三、檢視:小冊目錄

?要吹牛了! 傅哥,手寫Mybatis 而已,你怎麼把 Mybatis 都手寫了!

哈哈哈,寫的爽了,就順便都給敲了,包括:解析、繫結、反射、快取、事務,這還有註解、資料來源、MetaObject 都給幹了!

1. 目錄

《手寫Mybatis》小冊目錄:4部分18章

  • 部落格:https://bugstack.cn - 部落格選單中 Spring 欄目下 -> 手擼 Mybatis
  • 說明:在18章課程中,會逐步帶著讀者手寫出一套 Mybatis 框架,並且是一套串聯所有核心流程的 Mybatis 框架,閱讀學習後會對 ORM 原始碼有透徹清晰的瞭解。

2. 原始碼

《手寫Mybatis》原始碼內容:漸進式迭代開發

  • 原始碼:每一個章節的程式碼,都會在上一章節的基礎上進行擴充套件和迭代,這樣可以更加清晰的知曉,每一個章節都在新增什麼功能,改動了哪些程式碼,新增了什麼模組。這樣的方式能讓即使是小白讀者,也可以逐步學習掌握。

3. 視訊(B站)

《手寫Mybatis》視訊課程:B站視訊

  • 視訊:https://www.bilibili.com/video/BV1nY4y1B7eT
  • 說明:整套原始碼編寫內容,還會附帶著視訊講解,幫助有意願學習 Mybatis 原始碼的夥伴,可以快速上手並加深學習理解。

四、加入:手寫原始碼

之所以開放一部分小冊的文章和少量的程式碼,是為了告訴讀者在跟隨一個什麼樣的有技術熱情的人在學習,能得到什麼樣的成長。

也正因為我對技術的折騰,?看似牛皮的能力,才能讓讀者放心的追求。一少部分的付費,也是為了把技術分享這條路走的更加堅定。如果不是付費,那麼大部分閱讀的可能都是別人的潦草筆記,而不是深度的拆解分析,展示給讀者來龍去脈。

有需要校招、面試、晉升,想提高自己的技術深度,為自己的職業生涯續期,可以長穩發展,完善自己的技術體系,奔著高階開發和架構師路線的研發夥伴。

原始碼地址https://gitcode.net/xiaofuge/small-mybatis

留言來自加入知識星球:碼農會鎖,夥伴的認可

五、總結:我的經驗

其實我能知道大部分從事開發人員或者正在上學階段的同學,其實對於原始碼的學習,都是非常好的提高技術的方式。但其實一大部分人都不知道對於一個原始碼框架該從哪下手,很多時候即使閱讀原始碼也是感覺拿繡花針攪拌一缸水,沒啥收穫還弄的挺疲憊?。

這是因為與平常的業務需求開發或者自己學習的案例程式碼相比,框架原始碼中運用了大量的設計原則設計模式對系統功能進行解耦實現,也使用了不少如反射代理位元組碼等相關技術。

所以如果沒有大牛帶著你開路,而是自己硬摸索,其實很難裡清一套原始碼的全部脈絡。因為人在學習的過程中,總需要一份經驗的借鑑、積累和使用,所以在學習原始碼的過程中也是要借鑑他人的經驗,豐富的自己的羽翼,而後再用這些套路去學習其他的原始碼內容也就變得容易了。

相關文章