幾次想閱讀源碼,但是每回都堅(jiān)持不下去,畢竟讀源碼真的是一件很難得事情。隨便一份源碼,動(dòng)輒幾百個(gè)類,每個(gè)類幾百行,沒點(diǎn)毅力真的堅(jiān)持不下來。當(dāng)然,也有閱讀方法的緣故。
直到我看到了一本書《通用源碼閱讀指導(dǎo)書》,感覺才找到了源碼閱讀的方法,也正是在這本書的指導(dǎo)下,我讀完了第一份開源源碼MyBatis。
1 意義與難點(diǎn)
這本書最開始講了源碼閱讀的優(yōu)點(diǎn),作者總結(jié)了四點(diǎn):
- 透徹地理解項(xiàng)目的實(shí)現(xiàn)原理
- 接觸到成熟和先進(jìn)的架構(gòu)方案
- 學(xué)習(xí)到可靠與巧妙的實(shí)施技巧
- 發(fā)現(xiàn)自身知識(shí)盲點(diǎn),提升自身知識(shí)儲(chǔ)備
然后講解了為什么閱讀源碼十分困難,作者總結(jié)原因?yàn)槊恳粋€(gè)優(yōu)秀的工程項(xiàng)目都凝聚了眾多開發(fā)者的縝密思維邏輯;每一個(gè)優(yōu)秀的工程項(xiàng)目都經(jīng)歷了從雛形到成熟的曲折演化過程。最終,這些思維邏輯和演化過程都會(huì)投射和堆疊到源碼上,使得源碼閱讀的過程是一個(gè)通過源碼去逆推思維邏輯和演化過程的工作,因此十分困難。
2 源碼選擇
閱讀源碼的一個(gè)重要工作就是選擇合適的源碼,作者總結(jié)了選擇源碼的幾個(gè)緯度:
- 項(xiàng)目的成熟度
- 項(xiàng)目的應(yīng)用廣度
- 項(xiàng)目的涉及面
- 項(xiàng)目的規(guī)模
并給出了每個(gè)緯度的評(píng)判指標(biāo)。
3 源碼閱讀方法
選好源碼項(xiàng)目之后,要做的就是閱讀源碼。
作者介紹了源碼閱讀的方法、技巧、經(jīng)驗(yàn)。主要包括兩個(gè)大的步驟:
- 項(xiàng)目初探
- 源碼閱讀
在項(xiàng)目初探環(huán)節(jié),主要是通過斷點(diǎn)運(yùn)行項(xiàng)目,然后分析項(xiàng)目的整體框架、跳轉(zhuǎn)流向。而源碼閱讀部分則是最為主要的閱讀環(huán)節(jié)。
在源碼閱讀環(huán)節(jié),作者總結(jié)了許多的源碼閱讀方法。
4 源碼閱讀
作者介紹了以下幾個(gè)主要的閱讀方法:
- 模塊分析:通讀整個(gè)模塊中的類,分析模塊的主要功能。
- 模塊歸類:按照模塊功能將模塊進(jìn)行分類,例如分為基礎(chǔ)模塊、核心模塊、解析模塊等等。
- 自底向上:閱讀源碼的一個(gè)重要的思路就是自底向上,先閱讀外圍模塊,再深入核心模塊,這樣可以避免閱讀源碼時(shí)牽扯到太多的未閱讀模塊,打亂源碼閱讀的思路。
- 合理猜測:閱讀源碼時(shí),可以根據(jù)功能合理猜測其具體實(shí)現(xiàn),然后再通過源碼分析是否和猜測一樣。這樣可以提升源碼閱讀的效率,也能提升自己的架構(gòu)能力。
- 類比閱讀:可以通過相似代碼的比較,找出架構(gòu)的異同點(diǎn),然后分析這樣架構(gòu)的意義。
- 善于匯總:需要不斷匯總每個(gè)模塊的含義,與其他模塊的關(guān)系等,從而整體理解整個(gè)項(xiàng)目。
- 網(wǎng)格閱讀:作者提出要縱向閱讀以從淺到深,也要橫向閱讀,找準(zhǔn)同層次的架構(gòu)關(guān)系。
為了講解以上知識(shí)點(diǎn),作者以MyBatis源碼為例子,通讀了整個(gè)源碼。我讀完之后,真的對(duì)MyBatis的源碼有了十分透徹的理解。
而在每個(gè)章節(jié)前,作者還介紹了相關(guān)的基礎(chǔ)知識(shí),使得源碼的閱讀比較順暢。
總結(jié)
《通用源碼閱讀指導(dǎo)書》是一本很好的源碼閱讀入門書,是一本教會(huì)你“如何閱讀源碼”的書籍,也能讓你在源碼閱讀中總結(jié)相關(guān)的架構(gòu)知識(shí)。
讀完收獲很大,推薦。