組件35-中間件:中間件設(shè)計(jì)2-MGJRouter-1

(O) 介紹文件


每個(gè)組件姻报,涉及三個(gè)文件:MGJRouterMainModuleRouter迎瞧、MainModuleAPI
MGJRouter:核心文件夸溶,通過url注冊(cè)服務(wù)、通過url獲取服務(wù)——(不用動(dòng))凶硅;
MainModuleRouter:只有一個(gè)+load方法缝裁,注冊(cè)所需要的服務(wù)——(這是開發(fā)者要自己寫);
MainModuleAPI:統(tǒng)一披露API的文件足绅,MainModuleRouter通過這個(gè)文件來實(shí)現(xiàn)邏輯——(需要開發(fā)者去搜集這個(gè)組件中捷绑,所有要對(duì)外公布的api及實(shí)現(xiàn))。

(一) 使用流程


1氢妈、注冊(cè)u(píng)rl——時(shí)間:在類加載的時(shí)候
注冊(cè)服務(wù).png
2粹污、使用服務(wù) —— 在任何地方,只要注冊(cè)過
使用服務(wù).png
3首量、注冊(cè)點(diǎn)擊事件

在MainModuleRouter類的load方法中給點(diǎn)擊事件賦值一個(gè)打開服務(wù)的block(所謂內(nèi)部open)


在AppDelegate的啟動(dòng)方法中壮吩,注冊(cè)u(píng)rl對(duì)應(yīng)的block服務(wù),外部提供服務(wù)(經(jīng)嘗試加缘,寫在MainModuleRouter類的load方法中也可以的)

外界向內(nèi)部提供服務(wù)(但個(gè)人覺得無需這樣鸭叙,注冊(cè)和賦值打開服務(wù)都可以寫在MainModuleRouter的load方法中,一樣有效)拣宏。

(二) 原理:注冊(cè)和打開服務(wù)


一沈贝、注冊(cè)
1、MainModuleRouter中調(diào)用MGJRouter開始注冊(cè)勋乾,傳入url和block的具體實(shí)現(xiàn)
load方法中注冊(cè)服務(wù).png
2宋下、MGJRouter:該類的單例添加url及對(duì)應(yīng)的handler
添加url和block處理者.png
3嗡善、MGJRouter:url轉(zhuǎn)換成對(duì)應(yīng)的字典(表),并用該字典保存handler
字典保存block處理者.png

生成的表格是怎么樣的.png
4学歧、MGJRouter:url生成多層key字典(表)的具體方法
addURLPattern方法實(shí)現(xiàn).png
5滤奈、MGJRouter:url分解,成三部分撩满,其中 ://~ 代替
pathComponentsFromURL方法實(shí)現(xiàn).png
二、打開服務(wù)
1绅你、獲取對(duì)象

1.1 在AppDelegate中用MGJRouter獲取對(duì)象

1.2 MGJRouter文件中

1.3 block執(zhí)行的是MainModuleRouter文件中注冊(cè)的block

2伺帘、獲取服務(wù)

2.1 調(diào)用服務(wù)

2.2 MGJRouter文件中
2.3 調(diào)用注冊(cè)時(shí)的block





在MainModuleRouter.m中的+load方法中,用MGJRouter注冊(cè)服務(wù)忌锯,最后是保存在了MGJRouter類中的一個(gè)屬性中——可變字典routes伪嫁。

[MGJRouter registerURLPattern:@"lf://getRootVC" toObjectHandler:^id(NSDictionary *routerParameters) {
        return [MainModuleAPI rootTabBarCcontroller];
}];

1.其他地方用MGJRouter通過url,獲取服務(wù)偶垮,框架在維護(hù)一個(gè)url-block的表格张咳。

[MGJRouter openURL:@"lf://playAudio" withUserInfo:@{
        @"isPlaying": @(isPlaying)
} completion:nil];

通過MGJRouter來獲取對(duì)象;
通過MGJRouter來來執(zhí)行方法(方法名是字符串形式)似舵;

特點(diǎn):

  1. 每個(gè)業(yè)務(wù)組件, 都需要依賴這個(gè)框架脚猾;
  2. url維護(hù)成本高;硬解碼砚哗;
  3. 可以在組件內(nèi)部任何地方調(diào)用/注冊(cè)服務(wù), 沒有必要統(tǒng)一組件接口服務(wù)龙助。

MGJouter

是在維護(hù)一個(gè)表;
就一個(gè)類蛛芥;
單例提鸟,因?yàn)槭枪灿茫?/p>

MGJouter使用順序:以XMGFMMain為例

外界使用:在Appdelegate文件中,通過MGJRouter中間件調(diào)用方法——添加子控件仅淑,并傳入?yún)?shù)称勋。

Appdelegate使用通過MGJRouter中間件調(diào)用XMGFMMain

調(diào)用過程:在MGJRouter.m中觸發(fā)block,調(diào)用MainModuleRouter.m中的一個(gè)block:


MGJRouter

XMGFMMain內(nèi)部registerURL涯竟,讓外界提供代碼塊(即外界告訴內(nèi)部要做什么)及參數(shù)信息赡鲜。


MainModuleRouter.m
Snip20170715_101.png

~遇到了坑:

1、宿主工程做中間件庐船,
pod '某框架'
導(dǎo)入頭文件蝗蛙,編譯,報(bào)錯(cuò):找不到該框架的頭文件醉鳖。

~MGJRouter的思考

內(nèi)部register捡硅,讓外界調(diào)用,向內(nèi)部提供參數(shù)(即字典和代碼塊)盗棵,根據(jù)這些參數(shù)做事壮韭;block中會(huì)攜帶參數(shù)給外界北发。
外部open,填入字典參數(shù)和代碼塊喷屋,傳給內(nèi)部琳拨。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市屯曹,隨后出現(xiàn)的幾起案子狱庇,更是在濱河造成了極大的恐慌,老刑警劉巖恶耽,帶你破解...
    沈念sama閱讀 218,941評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件密任,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡偷俭,警方通過查閱死者的電腦和手機(jī)浪讳,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,397評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來涌萤,“玉大人淹遵,你說我怎么就攤上這事「合” “怎么了透揣?”我有些...
    開封第一講書人閱讀 165,345評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵,是天一觀的道長川抡。 經(jīng)常有香客問我淌实,道長,這世上最難降的妖魔是什么猖腕? 我笑而不...
    開封第一講書人閱讀 58,851評(píng)論 1 295
  • 正文 為了忘掉前任拆祈,我火速辦了婚禮,結(jié)果婚禮上倘感,老公的妹妹穿的比我還像新娘放坏。我一直安慰自己,他們只是感情好老玛,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,868評(píng)論 6 392
  • 文/花漫 我一把揭開白布淤年。 她就那樣靜靜地躺著,像睡著了一般蜡豹。 火紅的嫁衣襯著肌膚如雪麸粮。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,688評(píng)論 1 305
  • 那天镜廉,我揣著相機(jī)與錄音弄诲,去河邊找鬼。 笑死,一個(gè)胖子當(dāng)著我的面吹牛齐遵,可吹牛的內(nèi)容都是我干的寂玲。 我是一名探鬼主播,決...
    沈念sama閱讀 40,414評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼梗摇,長吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼拓哟!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起伶授,我...
    開封第一講書人閱讀 39,319評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤断序,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后糜烹,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體违诗,經(jīng)...
    沈念sama閱讀 45,775評(píng)論 1 315
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,945評(píng)論 3 336
  • 正文 我和宋清朗相戀三年景图,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片碉哑。...
    茶點(diǎn)故事閱讀 40,096評(píng)論 1 350
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡挚币,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出扣典,到底是詐尸還是另有隱情妆毕,我是刑警寧澤,帶...
    沈念sama閱讀 35,789評(píng)論 5 346
  • 正文 年R本政府宣布贮尖,位于F島的核電站笛粘,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏湿硝。R本人自食惡果不足惜薪前,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,437評(píng)論 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望关斜。 院中可真熱鬧示括,春花似錦、人聲如沸痢畜。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,993評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽丁稀。三九已至吼拥,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間线衫,已是汗流浹背凿可。 一陣腳步聲響...
    開封第一講書人閱讀 33,107評(píng)論 1 271
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留授账,地道東北人矿酵。 一個(gè)月前我還...
    沈念sama閱讀 48,308評(píng)論 3 372
  • 正文 我出身青樓唬复,卻偏偏與公主長得像,于是被迫代替她去往敵國和親全肮。 傳聞我的和親對(duì)象是個(gè)殘疾皇子敞咧,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,037評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容