為什么要組件化
隨著App的快速迭代与柑,業(yè)務(wù)模塊越來越復(fù)雜流炕,開發(fā)人數(shù)越來越多澎现。傳統(tǒng)的開發(fā)模式會導(dǎo)致代碼管理混亂,發(fā)布每辟、集成剑辫、測試越來越麻煩,當(dāng)項目越來越大的時候渠欺,你會發(fā)現(xiàn)以下一系列問題:
- 代碼編譯起來非常慢妹蔽,每次編寫代碼后需要拉下別人所有更新,然后再次提交挠将,可能還有沖突需要解決胳岂,即時你只是改動了一兩行代碼。
- 代碼耦合嚴(yán)重舔稀,各個模塊間相互導(dǎo)入乳丰,牽一發(fā)而動全身。
如何解決這些問題呢内贮,自然是將整個項目以業(yè)務(wù)功能和基礎(chǔ)功能進(jìn)行拆分产园,單獨制作成一個個的小組件,每個組件單獨管理夜郁,最后由整個主工程統(tǒng)一集成所有組件什燕,這就是組件化的基本思路。
組件化的優(yōu)點:
- 加快編譯速度竞端,可以把不會經(jīng)常變動的組件做成靜態(tài)庫屎即,同時每個組件可以獨立編譯,不依賴于主工程或者其他組件
- 每個組件都可以選擇自己擅長的開發(fā)模式(MVC / MVVM / MVP)
- 可以單獨測試每個組件
- 多條業(yè)務(wù)線可以并行開發(fā)事富,提高開發(fā)效率
iOS里面的組件化主要是通過cocopods把組件打包成單獨的私有pod庫來進(jìn)行管理技俐,這樣就可以通過podfile文件,進(jìn)行動態(tài)的增刪和版本管理统台。
首先我們要解決的問題是如何對業(yè)務(wù)模塊進(jìn)行拆分雕擂,這個問題沒有什么標(biāo)準(zhǔn)答案,畢竟每個app的業(yè)務(wù)都不盡相同饺谬,做到拆分出的單元盡量只對應(yīng)一個功能即可,然后將這些小的功能單元再次組合為一個更大的功能單元谣拣。
如圖募寨,可供參考
理論說完了森缠,接下來就是具體的代碼實操了
制作本地pod工程拔鹰,即組件
1. 創(chuàng)建本地項目
- 打開命令行,進(jìn)入你需要創(chuàng)建項目的文件夾下
cd /Users/sure/Desktop/iOS/XASpec
- 創(chuàng)建工程
pod lib create XAGuidePage
-
打開項目文件夾里面的Example文件夾下的工程贵涵,可以看到pods里面列肢,有個ReplaceMe的文件恰画,意思就是替換它,換成我們自己需要對外提供的類瓷马。
-
右鍵show in finder拴还,在finder中將我們自己的類復(fù)制進(jìn)去,刪掉ReplaceMe
- 關(guān)掉項目欧聘,打開命令行片林,cd到XAGuidePage文件夾下的Example文件夾下,執(zhí)行
pod install
重新打開項目,就能看到文件出現(xiàn)Pods下的Development Pods下面啦
可以通過以下方式添加依賴怀骤,注意:如果是發(fā)布到GitHub上的庫费封,它依賴的庫,必須是在GitHub上發(fā)布的蒋伦,不可以依賴本地庫
- 然后再Example文件夾下執(zhí)行弓摘,即可添加依賴
pod install
安裝依賴庫
- 到這一步,本地庫就已經(jīng)基本完成啦(如果想要引用這個本地pod庫痕届,將本地庫復(fù)制到你工程文件下韧献,在主工程Podfile里面加入pod 'XAGuidePage', :path => './XAGuidePage'即可,注意引用時不要采用絕對路徑來引用爷抓,這樣別人拉取代碼執(zhí)行pod install時會出問題势决,應(yīng)該采用相對路徑的形式引用,這里path的值應(yīng)該填寫本地庫podspec文件所在的文件夾蓝撇,../上層文件夾果复,./本層文件夾(即Podfile所在文件夾),自己填寫一下路徑執(zhí)行pod install即可)
可參考我的這篇文章
同理渤昌,炮制出多個組件庫虽抄,組件間解耦可采用CTMediator框架進(jìn)行。
最后項目的結(jié)構(gòu)應(yīng)該是這樣独柑。