上一篇我們說到組件化開發(fā)是一個App最大一層的架構(gòu),那具體到了一個一個的業(yè)務(wù)組件里,比組件化開發(fā)小一點(diǎn)的架構(gòu)就是三層架構(gòu)。所謂三層架構(gòu)就是指把項(xiàng)目中所有的類劃分到不同的層,目的是使項(xiàng)目邏輯更加清晰,提升開發(fā)和維護(hù)的效率,我們一般會把項(xiàng)目分為三層:數(shù)據(jù)層、業(yè)務(wù)層、視圖層。
創(chuàng)新互聯(lián)建站是一家集網(wǎng)站建設(shè),陵水黎族企業(yè)網(wǎng)站建設(shè),陵水黎族品牌網(wǎng)站建設(shè),網(wǎng)站定制,陵水黎族網(wǎng)站建設(shè)報價,網(wǎng)絡(luò)營銷,網(wǎng)絡(luò)優(yōu)化,陵水黎族網(wǎng)站推廣為一體的創(chuàng)新建站企業(yè),幫助傳統(tǒng)企業(yè)提升企業(yè)形象加強(qiáng)企業(yè)競爭力??沙浞譂M足這一群體相比中小企業(yè)更為豐富、高端、多元的互聯(lián)網(wǎng)需求。同時我們時刻保持專業(yè)、時尚、前沿,時刻以成就客戶成長自我,堅持不斷學(xué)習(xí)、思考、沉淀、凈化自己,讓我們?yōu)楦嗟钠髽I(yè)打造出實(shí)用型網(wǎng)站。
注意:嚴(yán)格來講,三層架構(gòu)并不真正就比組件化開發(fā)小,它們倆只是從不同的角度去做架構(gòu)而已,往往是相互融合的,比如組件化開發(fā)里網(wǎng)絡(luò)庫就是三層架構(gòu)里數(shù)據(jù)層的內(nèi)容,UI庫就是三層架構(gòu)里視圖層里的內(nèi)容等,這里之所以說“三層架構(gòu)是比組件化開發(fā)小一點(diǎn)的架構(gòu),主要是針對業(yè)務(wù)組件來說的”,當(dāng)然甚至我們在不使用組件化開發(fā)時項(xiàng)目里依然可以使用三層架構(gòu)。
比三層架構(gòu)再小一點(diǎn)的架構(gòu)就是視圖層架構(gòu),我們常說的MVC、MVVM都是?視圖層的架構(gòu)。
MVC,即Model-View-Controller,它們的關(guān)系如下:
MVVM,即Model-View-ViewModel,它們的關(guān)系如下:
組件化編程的關(guān)鍵目的是為了將程序模塊化,使各個模塊之間可以單獨(dú)開發(fā),單獨(dú)測試。當(dāng)然,隨之而來的版本問題也必須要解決,防止出現(xiàn)不兼容的組件版本破壞程序的穩(wěn)定性。
目前iOS組件化方案主要有三種;
在啟動時,注冊組件提供的服務(wù)(注冊URL以及關(guān)聯(lián)服務(wù)Block),然后在使用時,通過URL直接調(diào)用(openURL);
通過Protocol定義服務(wù)接口,組件通過實(shí)現(xiàn)該接口來提供服務(wù),最終的實(shí)現(xiàn)就是將Protocol和Class映射在一起,同時在內(nèi)存中保存一張映射表,使用的時候,通過Protocol去獲取Class對應(yīng)的服務(wù)。
Target Action這個方案是基于ObjC 的runtime、category 特性動態(tài)獲取模塊,例如通過NSClassFromString 獲取類并創(chuàng)建實(shí)例,通過 performSelector + NSInvocation動態(tài)調(diào)用方法。
首先每個模塊需要配置Target和Category,其中Target是每個組件對應(yīng)一個或者多個Target,Category是中間層Mediator的分類,使用分類的目的是為了讓Mediator的業(yè)務(wù)代碼分離,從而降低Mediator中的依賴和耦合性。
那么中間層Mediator是如何找到并調(diào)用組件的呢?這里正是利用了runtime的反射機(jī)制,在Category中找到對應(yīng)Target以及調(diào)用Target對應(yīng)的Action。
CTMediator 正是采用的Target Action方案,巧妙的使用了cocoaTouch提供的反射機(jī)制,方法簽名與命令模式,簡單又完美的解決了組件間的解耦問題。
解釋
推送分為2種情況,一個是私有庫的推送,例如公司自己的gitLabel;第二個是公有庫,例如前面的GitHub
pod組件就完成了,下一篇開始主項(xiàng)目跟組件的交流