作者:小傅哥
部落格:https://bugstack.cn
沉澱、分享、成長,讓自己和他人都能有所收穫!?
一、前言:手擼一萬行!
?完結撒花:4個月、20章、134個類、1.03萬行程式碼!
22年3月初,小傅哥開始準備著《手寫Mybatis》的相關資料,這也是繼《手寫Spring》後的又一項較大的成體系的內容輸出。
從準備之初我則希望這份《手寫Mybatis》要以原始碼框架為根基
,實現邏輯為指引
。不應該通過降低實現難度,僅僅用幾個類把 ORM 邏輯串聯出來。因為不貼近 Mybatis 複雜架構設計,那麼就不應該叫手寫Mybatis,只能算是手寫簡單 ORM!
而我更希望的是通過手寫Mybatis,學習Mybatis在面對複雜邏輯設計時,是如何處理的功能職責邊界,使了哪些設計原則
,用了什麼設計模式
,讓整個框架是那麼的遊刃有餘的處理各類複雜問題場景。
甚至是可以通過手寫Mybatis,學習下乾淨的程式碼是如何編寫的!而這些才是我願意花大量的時間,漸進式的拆解Mybatis的核心模組,逐步完成框架功能實現。—— 學會編寫出乾淨的程式碼,對國內的程式設計師太重要了! 因為專案的成本不只是開發階段,更多是以後的迭代和運維成本。
我的資料編寫,是希望讓更多和我一樣,在這條路上的研發夥伴,走的更紮實
、更長久
、更廣闊
!
二、講講:面的這麼難?
- 以前問:Mybatis 怎麼用
- 現在問:Mybatis 不需要給DAO介面寫實現類,是怎麼關聯上SQL語句執行並返回結果的
- 以前問:Mybatis 使用中有哪些常見錯誤
- 現在問:Mybatis 框架實現用了哪些設計模式
- 以前問:Mybatis 怎麼插入多條資料
- 現在問:Mybatis 插入資料返回插入ID的結果為0,是為什麼
- 以前問:Mybatis 外掛有什麼用
- 現在問:Mybatis 外掛是基於什麼設計實現的,什麼是SPI
- 以前問:Mybatis 有快取功能嗎
- 現在問:Mybatis 一級快取資料什麼重新整理到二級快取
等等一些列面試問題,都從簡單的詢問API使用,程式設計了對核心功能的理解!其實這工作性質有著非常緊密的變化,以前你的工作是呼叫API實現程式邏輯就能有份工作,現在這些簡單的功能開發都被低程式碼替代了,大部分核心的工作是編寫那些有可複用的技術元件、高可用的功能服務。
所以你的面試變難了,PS:當然也有些小公司跟風,雖然他們還沒有這樣成型的開發模式,但面試要先跟上!
但其實這些面試問題也都是在學習原始碼後可以遊刃有餘的解答的,甚至換各種方式問都可以給出最核心的解答,因為這不是背答案,而是真的悟了!
三、內卷:更需真本事!
都說卷,但其實都在偷偷學!
你可能還沒有搞明白,為啥要學習像Spring、Mybatis這樣的框架原始碼,而不是直接拿著自己手邊的業務工程程式碼進行反覆學習。
因為你手邊的業務程式碼,實在寫的太拉胯了!大部分都是為了堆功能湊出來的 if···else 沒有清晰的框架結構、沒有明確的設計原則、沒有統一的開發標準。
而這一切的問題很多都是早期為了搶佔市場,被業務方的老闆強壓力下來的專案需求,能多快上就多快上,而當風暴過後,越來越多這樣的工程程式碼其實已經逐步被下線。
大一些的公司也逐步講求框架的設計結構、程式碼的實現質量、工程交付的標準,如果再像以前一些惡的亂貼膏藥的寫程式碼,很可能沒等你開發完一個專案就被送走了。
所以你看DDD、洋蔥架構、整潔架構、設計模式,這些年開始被重視了吧,但又苦於之前的很多工廠程式碼沒有那麼好的實現標準,所以很多要從原始碼裡學習。只有掌握了這些慢下來的工程,才有可能在自己的業務中做出好的工程。
四、原始碼:兄弟一起學!
五、總結:又一次堅持!
其實我特別喜歡這樣耐著性子,慢慢彙總,慢慢輸出的感覺,因為只要在正確的路上,不反覆的橫跳,堅持著完成一件需要3~4個月的事情,一定比僅僅是隻學習幾天更有價值。
而這樣的事我已經做了好多,包括:面經手冊,Netty4.x,手寫Spring,用Java實現JVM,重學Java設計模式,SpringBoot中介軟體開發,IDEA外掛開發,DDD系統架構專案開發,位元組碼程式設計,手寫Spring、Lottery分散式專案...
雲山蒼蒼,江水泱泱,先生之風,山高水長!加油!