組件化
1.如何實現(xiàn)組件化
1)首先創(chuàng)建殼工程盛险。
2)在殼工程內(nèi)集成不同的功能模塊以及業(yè)務(wù)模塊瞄摊。
3)使用cocoapods 管理各個模塊。
4)使用JLRouter管理跳轉(zhuǎn)苦掘。
5)使用runtime管理消息分發(fā)换帜。
6)創(chuàng)建中間件,去管理A鹤啡、B惯驼、C、D等不同組件之間的通信以及跳轉(zhuǎn)揉忘。
2.組件化方案
- 基于URL router接口方式
- 基于protocol的方式
- 基于Target-Action runtime調(diào)用方案
URL router
這種方案一般都是各個組件把自己可以提供的服務(wù)通過url的形式注冊到一個中心管理器跳座,然后調(diào)用發(fā)就可以通過openURL的方式來打開這個url端铛,然后中心管理器解析這個url,把請求轉(zhuǎn)發(fā)到相應(yīng)的組件去執(zhí)行
優(yōu)點:
缺點:
1.各組件需要提前注冊(對外暴露的一些接口)
2.url的參數(shù)傳遞受到限制疲眷,只能傳遞常規(guī)的字符串參數(shù)禾蚕,無法傳遞非常規(guī)參數(shù),如UIImage狂丝、NSData等類型换淆。
3.路由寫錯后編譯沒問題,而實現(xiàn)運行就出問題了几颜,以后維護(hù)也不方便倍试。
4.內(nèi)存中維護(hù)映射表。
protocol
優(yōu)點:
1.解決了URL router接口方式無法傳遞非常規(guī)參數(shù)的問題蛋哭。
2.協(xié)議方法未實現(xiàn)的話县习,會報編譯警告。
缺點:
1.內(nèi)存中維護(hù)映射表谆趾。
2.對組件協(xié)議需要注冊躁愿,不注冊就無法調(diào)用。
Target-Action
Target-Action方案利用了OC的runtime特性沪蓬,無需注冊彤钟,直接在原有的組件之外加一層wrapper,把對外提供的服務(wù)都抽離到該層跷叉。然后通過runtime的TARGET performSelector:ACTION withObject:PARAMS找到對應(yīng)的組件逸雹,執(zhí)行方法和傳遞參數(shù)。
優(yōu)點:
1.內(nèi)存中不需要維護(hù)映射表
2.不需要注冊
缺點:
1.中間件實現(xiàn)繁瑣云挟。
2.中間件方法內(nèi)部容易寫錯梆砸,寫錯后編譯沒問題,而實現(xiàn)運行就出問題了园欣,以后維護(hù)也不方便辫樱。
3.組件化適用場景
團隊規(guī)模相對比較大比如10人以上,業(yè)務(wù)線比較多比較獨立俊庇,業(yè)務(wù)相對穩(wěn)定,