關於閱讀源碼的總結

爲什麼開始閱讀

其實源碼平時也有在看,但是時間比較碎片化,剛好最近需要做內部技術分享在調研技術棧,爲了避免枯燥無味,想更貼合平日的項目,spring與jdk基本也沒太多新意並且自以爲自己沒太自信能夠講清楚,另一方面數據庫一般又是整個項目的核心所在,所以這次主要從國內最常見的orm框架mybatis作爲主要的一個主要的分享內容。
由於考慮到整個源碼的分析可能篇幅較大,不追求華麗的描述和故弄玄虛,只是想簡簡單單的講清楚,所以分多篇文章去分析,每篇文章自己覺得比較重要的點。
在這裏插入圖片描述

如何閱讀源碼

源碼裏一般都是OOP的一種最佳實踐,可以學習其中的設計思想並應用在商業項目中,但是很多人最開始看源碼很容易陷入到實現細節中,抓不住重點和主鏈路,所以很容易勸退。所以學習源碼還是有一些技巧的。

  1. 抓住主線,分析源碼首先就是宏觀上知道這個源碼的目的是什麼,例如spring就是實現了IOC和DI的功能,概念比較抽象,也可以直接去實踐一下,沒有spring和有spring寫一下創建對象的代碼有啥不同,加深對框架的理解,只有清楚了整個框架帶來的價值之後,分析源碼才能避免“不識廬山真面目” 的尷尬。
  2. 區分jar的邊界與職責,很多框架都是一堆的jar去不斷的集成,我們分析源碼首先要宏觀的去看待整個框架做了什麼事情,然後再分清楚每個jar對應大概做了什麼事情,然後這樣就能在分析源碼的時候儘量不迷路。
  3. 抽象思維,對於開源框架來說,其很重要的一個特性就是要把通用需求給穩定化,在此基礎上進行迭代,不斷的添加最新的特性,在這個過程中保持良好的兼容性與擴展性,這就要求對其他框架採取解耦的方案,保持非入侵的方式。這樣帶來的代碼上的體現就是處處是接口,處處是抽象類,很多方法都是模板方法。這裏的行話,就是不要“寫死”。依賴抽象而不是實現,這樣就可以儘量的松耦合,所以有意識的增強對於接口和抽象類的理解,所以很多人也認爲 要比較好的閱讀源碼首先要熟悉經典設計模式與設計原則等面向對象理論。
  4. 底層代碼能力,這一塊是對於一些偏底層的一些技術實現的熟悉,例如反射,動態代理,字節碼植入,或則是範型的使用,函數編程等語法糖的熟悉。當然如果能熟悉JUC包的東西,多線程的理解也非常重要。
  5. 帶着問題看源碼,單純的閱讀的確很容易枯燥,但是我們在使用的過程中,由於前期可能主要關注在如何快速上手可能網上隨便搜索入門教程就開始使用後,滿足了日常工作需求就沒再深入的動力,但是其中某個特性爲什麼實現,例如mybatis定義的mapper接口沒有實現類,是如何注入到spring容器,帶着這樣的疑問,我們就很自然的產生了好奇心。
  6. 畫圖,圖像是比文字更容易加強記憶和理解的東西,語言是後天的,但眼睛是天生的,我們應該善於利用這單,閱讀感覺有點混亂的時候就開始進行思維導圖的整理,流程圖的整理等等,這樣的腦圖是很有價值的,當然也不要因此打斷閱讀的連貫性,而是一個大的階段整理一下即可,每個人的邏輯思維強度會有些不同,可以按需掌握節奏。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章