【Rason的iOS每周小應(yīng)用】iOS之模塊化

背景

當(dāng)團(tuán)隊(duì)發(fā)展到一定規(guī)模,各業(yè)務(wù)之間相互影響問題劇增(合作成本變高),就開始進(jìn)行模塊化之路。

  • 模塊化的說法:
    更準(zhǔn)確的說法是模塊化,而不是組件化。
  1. 模塊化:是橫向劃分,各業(yè)務(wù)模塊之間有依賴關(guān)系,往往通過路由器解耦。
  2. 組件化:是縱向劃分,更多的是基礎(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的過程:

  1. A->中間類:必然有參數(shù)的傳遞(商品ID、閉包等),也包含B所對(duì)應(yīng)的標(biāo)識(shí)(類名、路徑、其它標(biāo)識(shí))。
  2. 中間類->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ò)展

想深入了解的,還是需要了解一下主流的一些方案。

  1. JLRoutes方案
  2. 在現(xiàn)有工程中實(shí)施基于CTMediator的組件化方案
  3. iOS組件化——蘑菇街案例分析

參考資料

  1. iOS 組件化-路由解耦思想 JLRoutes 實(shí)戰(zhàn)篇(一)App內(nèi)控制器跳轉(zhuǎn)
  2. iOS組件化——蘑菇街案例分析
  3. JLRoutes
  4. JSDRouterGuide
  5. iOS應(yīng)用架構(gòu)談 組件化方案
  6. 在現(xiàn)有工程中實(shí)施基于CTMediator的組件化方案
  7. 手把手教你搭建cocoapods私有倉(cāng)庫(kù)
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容