背景
當(dāng)團(tuán)隊(duì)發(fā)展到一定規(guī)模,各業(yè)務(wù)之間相互影響問題劇增(合作成本變高),就開始進(jìn)行模塊化之路。
- 模塊化的說法:
更準(zhǔn)確的說法是模塊化,而不是組件化。
- 模塊化:是橫向劃分,各業(yè)務(wù)模塊之間有依賴關(guān)系,往往通過路由器解耦。
- 組件化:是縱向劃分,更多的是基礎(chǔ)組件,各組件相互獨(dú)立。
原理
主流都是通過路由器進(jìn)行解耦,通過CocoaPods、git進(jìn)行業(yè)務(wù)模塊分割,對(duì)應(yīng)技術(shù)框架有Mediator、JLRouter、CRN等。
路由
-
我們先看看目前的狀態(tài),引用一張圖說明:
image.png
沒錯(cuò),就是相互引用,耦合很嚴(yán)重。我們想做什么?VC都不要依賴其它的VC。引用一張圖說明:

image.png
我們就希望VC就只引入中間類(比如Router)就好了,不需要知道其它的控制器。這樣是不是很爽?讓我們看看怎么設(shè)計(jì)。
我們需要通過中間類跳轉(zhuǎn),那么A->中間類->B的過程:
- A->中間類:必然有參數(shù)的傳遞(商品ID、閉包等),也包含B所對(duì)應(yīng)的標(biāo)識(shí)(類名、路徑、其它標(biāo)識(shí))。
- 中間類->B:通過獲取前面拿到的信息,我們根據(jù)B的標(biāo)識(shí),對(duì)應(yīng)到正確的控制器,獲取到界面所需參數(shù),并通過閉包,回調(diào)給A。
預(yù)期結(jié)果
我用路由就可以模塊化了嗎?不行,你代碼寫一塊,可以確保不會(huì)改到其它業(yè)務(wù)模塊嗎?答案是否定的。所以我們需要通過CocoaPods、git進(jìn)行管理。我不用CocoaPods,可以進(jìn)行管理嗎?也可以,比如Workspace管理+git形式,RN+git形式等都可以。最后通過路由配置進(jìn)行業(yè)務(wù)模塊的管理(這里并沒有寫控制器,因?yàn)椴⒉皇撬锌刂破鞫紝?duì)外)
JLRoutes的二次封裝思路

image.png
初步的設(shè)計(jì)思路,所以還有很多沒考慮到的地方。僅供參考。
擴(kuò)展
想深入了解的,還是需要了解一下主流的一些方案。
