狠狠色丁香婷婷综合尤物/久久精品综合一区二区三区/中国有色金属学报/国产日韩欧美在线观看 - 国产一区二区三区四区五区tv

LOGO OA教程 ERP教程 模切知識(shí)交流 PMS教程 CRM教程 開發(fā)文檔 其他文檔  
 
網(wǎng)站管理員

如何快速自學(xué)開源項(xiàng)目?試試我的訣竅

freeflydom
2024年11月13日 9:4 本文熱度 623

如何快速學(xué)習(xí)項(xiàng)目?

1、初步了解項(xiàng)目

打開一個(gè) GitHub 上的開源項(xiàng)目后,第一件事就是去看項(xiàng)目的 README.md 介紹文檔,可以速覽一遍看看有沒有幫助你學(xué)習(xí)的內(nèi)容,比如技術(shù)選型、功能介紹、如何快速啟動(dòng)項(xiàng)目、架構(gòu)設(shè)計(jì)、注意事項(xiàng)等等。

以 MallChat 聊天室為例:https://github.com/zongzibinbin/MallChat ,項(xiàng)目介紹文檔中包含對核心功能的介紹,可以看看有沒有自己感興趣的功能:

如果是公司內(nèi)部的項(xiàng)目、或者比較成熟的開源項(xiàng)目,還會(huì)有 Wiki 文檔,往往對項(xiàng)目的介紹會(huì)更加詳細(xì),但暫時(shí)不用通篇閱讀,關(guān)注 “快速啟動(dòng)項(xiàng)目” 或者 “項(xiàng)目結(jié)構(gòu)介紹” 的部分即可。

像我如果決心要學(xué)一個(gè)新的項(xiàng)目,除了 GitHub 官方文檔外,還會(huì)在網(wǎng)上搜集一些相關(guān)資料,整理到自己的文檔中,便于后續(xù)學(xué)習(xí)時(shí)能快速找到。

 

2、了解項(xiàng)目結(jié)構(gòu)

看完項(xiàng)目介紹文檔后,建議先從上帝視角整體了解項(xiàng)目的結(jié)構(gòu),比如項(xiàng)目分為哪些模塊、每個(gè)模塊大致有哪些文件、文件命名規(guī)則如何等等,但不用進(jìn)一步理解模塊(或目錄)內(nèi)部的組織和實(shí)現(xiàn)方式。尤其對于復(fù)雜的微服務(wù)項(xiàng)目來說,這樣做可以快速幫你定位到學(xué)習(xí)重點(diǎn)。

大多數(shù)情況下,大家應(yīng)該都是把項(xiàng)目代碼下載到本地來學(xué)習(xí)。但如果你只是為了快速了解項(xiàng)目,并不打算深入學(xué)習(xí),其實(shí)有更高效的方式。

比如在 GitHub 倉庫的主頁按  句號(hào)鍵,就能快速進(jìn)入網(wǎng)頁版的代碼編輯器,跟本地瀏覽項(xiàng)目的體驗(yàn)幾乎一致:

對于有一定經(jīng)驗(yàn)的開發(fā)者,一般會(huì)先查找關(guān)鍵文件,比如前端項(xiàng)目找 package.json(Node.js)、Java 項(xiàng)目找 pom.xml(Maven)或 build.gradle(Gradle)、Python 項(xiàng)目找 requirements.txt 或 setup.py 等,這些文件通常包含項(xiàng)目依賴和配置信息。如果項(xiàng)目是比較規(guī)范的,一般通過依賴和配置信息就能快速理解項(xiàng)目結(jié)構(gòu)了。

舉個(gè)例子,看到 aop 依賴,就知道項(xiàng)目用到了切面;看到 freemarker 依賴,就知道項(xiàng)目資源目錄中會(huì)有 FTL 模板文件;看到 Redisson,就知道會(huì)有初始化 Redisson 客戶端的配置類,這些就是積累經(jīng)驗(yàn)的重要性了。

 

3、運(yùn)行項(xiàng)目

如果要正式學(xué)習(xí)項(xiàng)目,先不要急著去閱讀源碼,而是要先把項(xiàng)目在本地成功運(yùn)行,便于后續(xù)邊調(diào)試邊學(xué)習(xí)。

運(yùn)行項(xiàng)目的步驟很簡單,用 git clone 命令將項(xiàng)目復(fù)制到你的電腦,然后根據(jù) README 文件或其他文檔中的指示,安裝項(xiàng)目的必要依賴項(xiàng)、修改本地運(yùn)行配置、并最終運(yùn)行項(xiàng)目。

雖然步驟很簡單,但現(xiàn)實(shí)往往是大家把項(xiàng)目拉到本地后各種各樣的報(bào)錯(cuò)信息,所以運(yùn)行項(xiàng)目時(shí)要格外注重以下幾點(diǎn):

  1. 確保自己系統(tǒng)環(huán)境和項(xiàng)目要求一致,比如注意下前端 Node.js 和后端 JDK 版本要求。

  2. 確保項(xiàng)目依賴的版本和項(xiàng)目要求一致,比如后端依賴的 MySQL 和 Redis 版本。對于這種主流的技術(shù),一般情況下只要?jiǎng)e用太新的版本,基本不會(huì)影響項(xiàng)目的運(yùn)行。

  3. 修改本地運(yùn)行配置為自己的,比如數(shù)據(jù)庫賬號(hào)、密碼等,而且要格外注意不要讀取錯(cuò)了配置文件,否則可能改了半天還在疑惑 “怎么配置沒生效呢”?

遇到報(bào)錯(cuò)是很正常的,因?yàn)椴皇撬械拈_源項(xiàng)目都做到了 “易用易上手”,遇到報(bào)錯(cuò)時(shí),我們只要定位到關(guān)鍵報(bào)錯(cuò)信息,然后順藤摸瓜找到對應(yīng)的文件去修改即可。實(shí)在搞不定,這不還有搜索引擎和 AI 么?

這里分享一個(gè)常用的快速運(yùn)行項(xiàng)目的技巧。有的時(shí)候項(xiàng)目用到了很多依賴(比如 MallChat 中用了 MinIO、RocketMQ 等),但是我們本地并沒有安裝這些依賴,導(dǎo)致項(xiàng)目無法啟動(dòng)。如下圖,因?yàn)槲覜]安裝 RocketMQ,導(dǎo)致啟動(dòng)時(shí)連接 RocketMQ 報(bào)錯(cuò):

要想啟動(dòng)項(xiàng)目,傳統(tǒng)方法就是自己安裝所有依賴,但如果項(xiàng)目只有一個(gè)不起眼的位置用到了某個(gè)依賴,其實(shí)花時(shí)間去安裝性價(jià)比不高。這時(shí),我們可以用一種更簡單的方法,直接禁用掉用到這些依賴的 Bean 加載。

比如在啟動(dòng)類加上 exclude ,就能快速禁用某些依賴的自動(dòng)加載,示例代碼如下:

@SpringBootApplication(exclude = {RocketMQAutoConfiguration.class})

但是,禁用了 RocketMQ Bean 的初始化后,如果有代碼用到了這個(gè) Bean,就會(huì)因?yàn)槿笔б蕾嚨?Bean 而報(bào)錯(cuò)。這種情況下,可以使用 @Lazy 注解對 Bean 進(jìn)行懶加載,用到的時(shí)候才會(huì)加載,啟動(dòng)項(xiàng)目時(shí)就不會(huì)報(bào)錯(cuò)了~ 示例代碼如下:

public class MQProducer {
   @Autowired
   @Lazy
   private RocketMQTemplate rocketMQTemplate;
}

 

4、了解業(yè)務(wù)流程和庫表設(shè)計(jì)

在閱讀代碼學(xué)習(xí)前,最好先整體了解項(xiàng)目的業(yè)務(wù)流程和庫表設(shè)計(jì),有助于明確后續(xù)閱讀源碼時(shí)的順序和學(xué)習(xí)方向。

核心業(yè)務(wù)流程可以通過閱讀文檔、或者自己體驗(yàn)系統(tǒng)的方式來了解。比如對于聊天室系統(tǒng),核心業(yè)務(wù)流程就是:用戶登錄 => 用戶上線 => 添加好友 => 創(chuàng)建房間 => 加入房間 => 發(fā)送消息 => 消息審核 => 其他用戶接收消息 => 回復(fù)消息。

了解項(xiàng)目的庫表設(shè)計(jì)也是有技巧的,比起直接看 SQL 文件,一般我會(huì)先在本地初始化數(shù)據(jù)庫,然后通過可視化圖表來查看。

如圖,表之間的關(guān)系一目了然!比如房間又分為單聊和群聊,一個(gè)房間內(nèi)有多個(gè)會(huì)話和消息:

 

5、閱讀代碼

剛開始閱讀代碼時(shí),不要急著一行代碼一行代碼地按照順序去閱讀,而是要先整體理解每個(gè)目錄的 作用和目錄內(nèi)部的文件組織形式 ,但暫時(shí)不必深入理解具體的實(shí)現(xiàn)方式。

舉個(gè)例子,對于 MallChat 項(xiàng)目,你要先能明確紅字中的信息:

查看某個(gè)目錄內(nèi)部的文件組織形式時(shí),有一個(gè)小技巧。可以直接在 IDEA 中右鍵點(diǎn)擊某個(gè)包,查看 UML 結(jié)構(gòu)圖:

通過結(jié)構(gòu)圖,我們可以速覽類之間的關(guān)系。比如下圖中,工廠創(chuàng)建策略、兩個(gè)具體策略繼承了抽象策略類:

之后,你就可以找到感興趣的項(xiàng)目核心功能模塊進(jìn)行學(xué)習(xí)了,分享幾個(gè)學(xué)習(xí)技巧:

1)如果想快速學(xué)習(xí)某個(gè)功能的實(shí)現(xiàn),建議是通過文檔等方式 先了解業(yè)務(wù)流程 ,再學(xué)習(xí)源碼。學(xué)習(xí)源碼時(shí),建議使用 Debug 模式啟動(dòng)項(xiàng)目,通過接口文檔(或前端)發(fā)送請求,完整地分析一個(gè)請求的處理流程。

可以通過 IDEA 的 Endpoints 功能快速查看項(xiàng)目中的接口,并定位到源碼:

2)如果想快速了解單個(gè)文件的核心結(jié)構(gòu)(比如方法和屬性),可以使用 IDEA 的 Structure 功能,如圖:

3)可以通過 Call Hierarchy 功能查看方法、類或變量在程序中被調(diào)用的層次結(jié)構(gòu)和關(guān)系。比如下圖我查看了 doMark 方法的調(diào)用者視圖,可以看到哪些方法調(diào)用了它,便于快速理解代碼之間的交互,不用自己一層一層點(diǎn)進(jìn)去看了。

4)可以通過 Find Usages 功能快速查看一個(gè)方法或者類在項(xiàng)目中所有的使用位置:

5)當(dāng)然,對于復(fù)雜的功能,單獨(dú)看代碼可能是理解不了的,這時(shí)就需要搭配文檔和代碼注釋了。什么?沒有文檔?!不寫注釋?!那就直接通過 Git 版本控制工具找到原作者去詢問吧。

 

6、理解項(xiàng)目開發(fā)流程和規(guī)范

在你熟悉了項(xiàng)目后,就可以嘗試參與開發(fā)了。可以先通過 閱讀項(xiàng)目的貢獻(xiàn)指南或開發(fā)文檔 來理解項(xiàng)目的開發(fā)流程、開發(fā)規(guī)范等,跟項(xiàng)目的其他開發(fā)者保持一致。如果有疑惑,可以看看別人的代碼中是怎么做的,有樣學(xué)樣就行;實(shí)在不確定的話,最好是提前詢問,不要提交一堆不符合規(guī)范的代碼,再被別人打回來,浪費(fèi)彼此的時(shí)間。

 

7、參與項(xiàng)目

最后,學(xué)習(xí)開源項(xiàng)目最好的方式就是親身參與項(xiàng)目的開發(fā),這也是我一直建議大家做的,不僅能提升能力、也能給自己的簡歷加分。

其實(shí)參與開源項(xiàng)目沒有那么困難,可以先在項(xiàng)目的 Issues 部分查看別人反饋的 Bug,并且?guī)兔π迯?fù),熟悉整個(gè)參與開源項(xiàng)目的流程。之后還可以 跟作者溝通 并嘗試添加新功能、進(jìn)行優(yōu)化等。

如果想讓你貢獻(xiàn)的代碼更快被作者接受,就一定要做好溝通!因?yàn)槲易约阂灿泻芏嚅_源項(xiàng)目,也有小伙伴給我貢獻(xiàn)過代碼,但不可能所有的代碼都接受。因?yàn)槊總€(gè)人關(guān)于項(xiàng)目的想法是不同的,在沒有跟作者交流的情況下,可能你做的功能對項(xiàng)目并沒有幫助、超出了項(xiàng)目的規(guī)劃,反而會(huì)讓項(xiàng)目更加復(fù)雜。團(tuán)隊(duì)開發(fā)也是一樣,大家要一起評審需求,確保需求是有價(jià)值的、和項(xiàng)目定位是匹配的,而不是誰想加功能就加功能。

轉(zhuǎn)自https://www.cnblogs.com/yupi/p/18362486


該文章在 2024/11/13 9:04:44 編輯過
關(guān)鍵字查詢
相關(guān)文章
正在查詢...
點(diǎn)晴ERP是一款針對中小制造業(yè)的專業(yè)生產(chǎn)管理軟件系統(tǒng),系統(tǒng)成熟度和易用性得到了國內(nèi)大量中小企業(yè)的青睞。
點(diǎn)晴PMS碼頭管理系統(tǒng)主要針對港口碼頭集裝箱與散貨日常運(yùn)作、調(diào)度、堆場、車隊(duì)、財(cái)務(wù)費(fèi)用、相關(guān)報(bào)表等業(yè)務(wù)管理,結(jié)合碼頭的業(yè)務(wù)特點(diǎn),圍繞調(diào)度、堆場作業(yè)而開發(fā)的。集技術(shù)的先進(jìn)性、管理的有效性于一體,是物流碼頭及其他港口類企業(yè)的高效ERP管理信息系統(tǒng)。
點(diǎn)晴WMS倉儲(chǔ)管理系統(tǒng)提供了貨物產(chǎn)品管理,銷售管理,采購管理,倉儲(chǔ)管理,倉庫管理,保質(zhì)期管理,貨位管理,庫位管理,生產(chǎn)管理,WMS管理系統(tǒng),標(biāo)簽打印,條形碼,二維碼管理,批號(hào)管理軟件。
點(diǎn)晴免費(fèi)OA是一款軟件和通用服務(wù)都免費(fèi),不限功能、不限時(shí)間、不限用戶的免費(fèi)OA協(xié)同辦公管理系統(tǒng)。
Copyright 2010-2025 ClickSun All Rights Reserved