模塊化方案
一偏瓤、蘑菇街:MGJRouter ------URL Router 模塊化方法
URLRouter可以參考開源界比較成熟的方案MGJRouter观游、JLRouter、HHRouter缰犁,把每一個模塊以一個URL的形式作為獨立存在的界限范圍。URLRouter需要在內(nèi)存中維護一張URL表作為key來實現(xiàn)對應的push或者喚起對應的模塊。類似get方式的openURl它在傳遞參數(shù)過程中不能傳遞類似于對象這樣的數(shù)據(jù)豺憔,只能傳遞普通類型數(shù)據(jù)。
例:
注冊
[MGJRouter registerURLPattern:@"mgj://detail" toHandler:^(NSDictionary *routerParameters) {
// create view controller with id
// push view controller
}];
遠程調(diào)用方式:無法表達非常規(guī)對象
[MGJRouter openUrl:"mgj://detail?id=123&type=0"];
本地調(diào)用方式 :如下方式可使用非常規(guī)對象够庙。
[MGJRouter openUrl:"mgj://detail" params:@{
@"id":"123",
@"type":"0",
@"image":[UIImage imageNamed:@"test"]
}]
使用ModuleManager管理模塊加載--類似github源碼:FRDModuleManager
appModuleManager.addModule(AppModuleA())
appModuleManager.addModule(AppModuleB())
二恭应、casatwy:CTMediator ------Target Action 模塊化方案
TargetAction也是基于蘋果原生的Runtime的優(yōu)勢,其優(yōu)勢很大在于可以做到無需加載內(nèi)存耘眨,并且在調(diào)用中沒有相關(guān)的依賴昼榛。在調(diào)用中的缺陷在于只有在運行池中才可以知道對應的組件是否存在,若不存在會造成對應的Crash剔难。另外代碼中會出現(xiàn)HardCode,代碼變得晦澀難懂胆屿,調(diào)用其他模塊方法沒有提示。使用CTMediator 分類的方式解決調(diào)用提示問題也有點重復造輪子的意思钥飞。
[[CTMediator sharedInstance] performTarget:targetName action:actionName params:@{...}]
三莺掠、阿里巴巴:BeeHive ------ Protocol class 模塊化方案
Protocolclass是利用原始class以及對應的Protocol用到的Serviceinterface去進行實現(xiàn)以及接口的分離,讓大部分的業(yè)務方只需要基于Protocol的interface進行調(diào)用读宙。缺點是其過程中會涉及到內(nèi)存占用的問題彻秆,另外調(diào)用方和響應方都必須依賴于同一個service協(xié)議文件,每個service協(xié)議需單獨一個庫,pod庫數(shù)量大量增加唇兑。
注冊
[[BeeHive shareInstance] registerService:@protocol(HomeServiceProtocol) service:[BHViewController class]];
使用
#import "BHService.h"
id< HomeServiceProtocol > homeVc = [[BeeHive shareInstance] createService:@protocol(HomeServiceProtocol)];
// use homeVc do invocation
方案選擇
每個方案都有各自優(yōu)缺點酒朵,請根據(jù)需求自行選擇。
Limboy蘑菇街文章閱讀
蘑菇街MGJRouter:組件化之路
蘑菇街Protocol class:組件化之路-續(xù)
casaTwy文章閱讀
iOS應用架構(gòu)談 開篇
iOS應用架構(gòu)談 view層的組織和調(diào)用方案
iOS應用架構(gòu)談 網(wǎng)絡(luò)層設(shè)計方案
iOS應用架構(gòu)談 本地持久化方案及動態(tài)部署
iOS應用架構(gòu)談 組件化方案
阿里BeeHive 文章閱讀
BeeHive:大型iOS項目解耦實踐
BeeHive: 源碼解讀
BeeHive:iOS模塊化之路
其他
jiaModule方式 https://github.com/wujunyang/jiaModuleDemo
58同城:http://mp.weixin.qq.com/s/PbOh-l0E4bD3HoKj0GzYWQ
精品
其他網(wǎng)友:http://www.cocoachina.com/ios/20170301/18811.html