1. 什么是組件化胞枕? ( 1分鐘)
組件化沒(méi)有官方嚴(yán)格的定義杆煞,因?yàn)檫@三個(gè)字已經(jīng)是一個(gè)很直白的單詞了,平時(shí)工作閑暇的時(shí)候總會(huì)造一些輪子腐泻,這些輪子就可以叫作一個(gè)組件决乎,如果在一個(gè)項(xiàng)目中,也可能會(huì)按照功能需求進(jìn)行劃分組件派桩,所以沒(méi)有嚴(yán)格的界限构诚,不如把它定義為一段由獨(dú)立功能的代碼集合,呵呵铆惑。范嘱。。
2.怎么實(shí)現(xiàn)組件化開(kāi)發(fā)员魏?( 3分鐘)
在了解了組件只是代碼集合之后丑蛤,下一步理所當(dāng)然就是想知道各個(gè)組件之間如何無(wú)耦合的進(jìn)行通訊账磺,可以說(shuō)方式有很多汉矿,在ios 的生態(tài)環(huán)境里我可以列出3種方法,1.通知 2.runtime 3.設(shè)計(jì)中間件动猬,這三種方法只有第3種是所有編程語(yǔ)言中都可以通用的思路虏束,所以下面會(huì)進(jìn)行介紹棉饶,runtime這種方式可能影響蘋果審核,自行研究一下魄眉,通知這種消息模式就是一種天然的解耦方法砰盐,不知道的可以私信問(wèn),太簡(jiǎn)單了
3.圖解中間件設(shè)計(jì) ( 4分鐘)
從圖二可以看出各個(gè)模塊之間沒(méi)有直接的關(guān)聯(lián)了坑律,但是他們都依賴中間件岩梳,
4.中間件設(shè)計(jì)原理 ( 7分鐘)
中間件會(huì)在堆控件維護(hù)一個(gè)注冊(cè)服務(wù)表囊骤,哈希表結(jié)構(gòu),在ios 中的實(shí)現(xiàn)就是一個(gè)字典冀值,在這個(gè)字典中會(huì)存儲(chǔ)一段自定義字符串為key(這個(gè)自定義字符串也叫接口)然后保存一段代碼塊(這算代碼也叫服務(wù))也物,這段代碼塊在iOS中的實(shí)現(xiàn)形式就是block
這里舉一個(gè)場(chǎng)景來(lái)描述剛才說(shuō)的話,兩個(gè)組件報(bào)表模塊和單據(jù)模塊列疗,在報(bào)表模塊提供了一個(gè)報(bào)表查詢功能滑蚯,然后在單據(jù)的模塊內(nèi)部去調(diào)用這個(gè)不屬于自己的功能
接口 | 服務(wù) | 服務(wù)提供方 |
---|---|---|
"jz://report/queryData" | 報(bào)表查詢功能 | 報(bào)表模塊 |
- 報(bào)表模塊先向全局字典中注冊(cè)報(bào)表查詢服務(wù)("jz://report/queryData") 這段代碼寫在報(bào)表模塊中
[MGJRouter registerURLPattern:@"jz://report/queryData" toHandler:^(NSDictionary *routerParameters) {
NSLog(@"%@",routerParameters);
NSDictionary *userInfo = routerParameters[MGJRouterParameterUserInfo];
void (^completion)(id result) = routerParameters[MGJRouterParameterCompletion];
NSArray *reportData = @[];
if (completion) {
completion(reportData);
}
}];
- 單據(jù)模塊調(diào)用報(bào)表查詢服務(wù) 這段代碼寫在單據(jù)模塊中
NSArray *queryStr = @[@{@"StartValue":@"",@"Operator":@"like",@"DestValue":@"2017-10-09 15:55:40",@"EndValue":@"",@"Id":@"f59ff536-07dc-451c-b0ea-45aea40f5cf8"}];
NSString *reportTplId = @"hfddff536-07dc-451c-b0ea-4581511dfd454";
NSMutableDictionary *userInfo = [NSMutableDictionary dictionary];
[userInfo setObject:queryStr forKey:@"key_queryStr"];
[userInfo setObject:reportTplId forKey:@"key_reportTplId"];
[MGJRouter openURL:@"jz://report/queryData" withUserInfo:userInfo completion:^(id result) {
NSLog(@"報(bào)表組件回調(diào)結(jié)果:%@",result);
}];
看到這里還有不明白的歡迎留言。