iOS 組件化

//聯(lián)系人:石虎?QQ:1224614774?昵稱:嗡嘛呢叭咪哄

一、概念

1.為什么要組件化?

? * 組件和組件之間沒有明確的約束;

? * 組件單獨(dú)開發(fā)、單獨(dú)測試,不能揉入主項(xiàng)目中開發(fā),測試也可以針對性的測試;

? * 解決人多(更好的協(xié)作)、需求多(更好的功能模塊劃分)的問題;

? * 解決項(xiàng)目模塊間的代碼耦合問題;(堅(jiān)決抵制業(yè)務(wù)組件間代碼直接引用)

2.如何拆分組件?

? 基礎(chǔ)功能組件:(類似于性能統(tǒng)計(jì)、Networking、Patch、網(wǎng)絡(luò)診斷等)

? 按功能分庫,不涉及產(chǎn)品業(yè)務(wù)需求,跟庫Library類似

? 通過良好的接口拱上層業(yè)務(wù)組件調(diào)用;

? 不寫入產(chǎn)品定制邏輯,通過擴(kuò)展接口完成定制;

? 基礎(chǔ)UI組件:(例如下拉刷新組件、iCausel類似的組件)

? 產(chǎn)品內(nèi)通用UI組件;(各個(gè)業(yè)務(wù)模塊依賴使用,但需要保持好定制擴(kuò)展的設(shè)計(jì))

? 公共通用UI組件;(不涉及具體產(chǎn)品的視覺設(shè)計(jì), 目前較少)

產(chǎn)品業(yè)務(wù)組件:(例如圈子、1元購、登錄、客服MM等)

? 業(yè)務(wù)功能間相對獨(dú)立,相互間沒有Model共享的依賴;

? 業(yè)務(wù)之間的頁面調(diào)用只能通過UIBus進(jìn)行跳轉(zhuǎn);

? 業(yè)務(wù)之間的邏輯Action調(diào)用只能通過服務(wù)提供;

二、方案

方案一、url-block

? ?這是蘑菇街中應(yīng)用的一種頁面間調(diào)用的方式,通過在啟動(dòng)時(shí)注冊組件提供的服務(wù),把調(diào)用組件使用的url和組件提供的服務(wù)block對應(yīng)起來,保存到內(nèi)存中。在使用組件的服務(wù)時(shí),通過url找到對應(yīng)的block,然后獲取服務(wù)

下圖是url-block的架構(gòu)圖:

方案二、target-action

? ?casa的方案是通過給組件包裝一層wrapper來給外界提供服務(wù),然后調(diào)用者通過依賴中間件來使用服務(wù);其中,中間件是通過runtime來調(diào)用組件的服務(wù),是真正意義上的解耦,也是該方案最核心的地方。具體實(shí)施過程是給組件封裝一層target對象來對外提供服務(wù),不會(huì)對原來組件造成入侵;然后,通過實(shí)現(xiàn)中間件的category來提供服務(wù)給調(diào)用者,這樣使用者只需要依賴中間件,而組件則不需要依賴中間件。

下圖是casa的組件化方案架構(gòu)圖:

方案三、protocol-class

? ? 針對方案一的問題,蘑菇街又提出了另一種組件化的方案,就是通過protocol定義服務(wù)接口,組件通過實(shí)現(xiàn)該接口來提供接口定義的服務(wù),具體實(shí)現(xiàn)就是把protocol和class做一個(gè)映射,同時(shí)在內(nèi)存中保存一張映射表,使用的時(shí)候,就通過protocol找到對應(yīng)的class來獲取需要的服務(wù)。

謝謝!!!

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

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

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