【架構(gòu)】淺談IOS之ROUTE+RAC+MVVM

最近公司的項(xiàng)目又啟動(dòng)了Native-IOS,假設(shè)了一套曾經(jīng)風(fēng)靡一時(shí)的Route+RAC+MVVM框架泣刹,站在自己的角度淺顯的聊一下項(xiàng)目架構(gòu)。


JLRoute

Route是一個(gè)帶有簡(jiǎn)單的基于塊的API的URL路由庫(kù)犀被。它旨在使您在應(yīng)用程序中以最少的代碼處理復(fù)雜的URL方案變得非常簡(jiǎn)單椅您。Route可以很方便的處理不同 URL schemes 以及解析它們的參數(shù),并通過回調(diào) block 來(lái)處理 URL 對(duì)應(yīng)的操作 , 是一個(gè)可以用于處理復(fù)雜跳轉(zhuǎn)邏輯的三方庫(kù)弱判。

基本邏輯是Route擁有一個(gè)全局的routeControllersMap襟沮。在這個(gè)Map里面我們提前注冊(cè)好相關(guān)的路由以及在Plist文件里配置好項(xiàng)目的schem锥惋。 進(jìn)行對(duì)應(yīng)路由跳轉(zhuǎn)時(shí)候只需要輸入對(duì)應(yīng)ViewController的URL 就可以進(jìn)行present 或者push跳轉(zhuǎn)昌腰。

其具體的使用方法JLRoute使用方法

總的來(lái)說(shuō)Route的使用效果相對(duì)于在各個(gè)頁(yè)面之間進(jìn)行 present 和 push 邏輯清晰很多。 我們可以根據(jù)Route的URL進(jìn)行模塊分離和復(fù)用在路由層面也可以做很多數(shù)據(jù)統(tǒng)計(jì)等膀跌。同時(shí)可以省去導(dǎo)入頭文件的煩惱遭商。 這也是當(dāng)初組件化的精髓之一(去頭文件)

當(dāng)然有利就有弊相對(duì)于傳統(tǒng)的方法路由的正向逆向傳值是一個(gè)挑戰(zhàn),解決方案各有不同對(duì)于

正向傳值可以通過URLParam也可以通過全局的對(duì)象字典進(jìn)行跨控制器傳值捅伤。

逆向則可以通過RAC配合Notifaction進(jìn)行高內(nèi)聚的代碼進(jìn)行反向傳值劫流。如下:

[[[[NSNotificationCenter defaultCenter] rac_addObserverForName:@"noti" object:nil] throttle:1] subscribeNext:^(id x) {

? ? ? ? NSLog(@"%@",x);

? }];

在外層VC注冊(cè)通知不過要記得移除觀察。


RAC

基于Stream通過面相協(xié)議編程實(shí)現(xiàn)的一個(gè)非常強(qiáng)大的函數(shù) + 響應(yīng) 編程第三方庫(kù) 丛忆。

在項(xiàng)目中pod 'ReactiveObjC', '~> 3.1.0' pod install 即可

具體的使用可以參考這位大佬的文章

RAC原理解析?在這里我只總結(jié)一下常用的幾個(gè)類和使用原則祠汇。

首先我們要了解冷信號(hào)和熱信號(hào)是什么RAC之冷信號(hào)和熱信號(hào)

RACSignal 冷信號(hào), 我們自己寫項(xiàng)目的時(shí)候很少單獨(dú)把他拎出來(lái)寫熄诡。

RACSubject 這個(gè)是我們經(jīng)常用的類可很,這個(gè)類的特點(diǎn)就是單向傳播,在實(shí)際項(xiàng)目中的應(yīng)用主要是基于MVVM模式 結(jié)偶ViewModel和ViewController的數(shù)據(jù)傳遞以及viewModel和View的數(shù)據(jù)傳遞凰浮,說(shuō)直接一點(diǎn)就是簡(jiǎn)單的解決了單項(xiàng)綁定的問題我抠, 并且邏輯非常清晰, 有幾個(gè)RACSubject就有幾個(gè)單項(xiàng)綁定袜茧。 我們使用時(shí)候在需要執(zhí)行Block的地方訂閱 例如

[self.viewModel.btnClickSingnal subscribeNext:^(id? _Nullable x) {

? ? ? ? NSLog(@"x信號(hào)? ? %@",x);

? ? }];

在數(shù)據(jù)源進(jìn)行發(fā)送的地方使用

[self.btnClickSingnal sendNext:@"你要發(fā)送的信息"]; 就可以了菜拓。

講完了單向綁定和數(shù)據(jù)傳值雙向綁定和數(shù)據(jù)傳值就很好理解了, 無(wú)非就是在單向傳值的訂閱方也提供一個(gè)發(fā)送逆向傳值的send方法 這時(shí)候我們就需要使用到RACCommand.使用方法很簡(jiǎn)單笛厦。 在上面的鏈接里面也分享了相關(guān)的使用方法纳鼎。 總結(jié)下來(lái)就是,控制器傳值用RAC配合Notifaction,View ViewModel ViewController之間單向綁定傳值就用RacSubject 雙向綁定傳值就用RaCCommand.



MVVM

MVVM即Model View ViewModel的縮寫喷橙, 是一種常用的架構(gòu)設(shè)計(jì),它最大的優(yōu)點(diǎn)就是數(shù)據(jù)視圖分離啥么, 使得ViewController中的代碼變得很少并且邏輯清晰。把數(shù)據(jù)的處理都丟到ViewModel里面 包括一些數(shù)據(jù)的渲染和邏輯處理也都丟到ViewModel里面贰逾。

通常情況下ViewModel和Model是在一起使用的 因?yàn)橐话愕木W(wǎng)絡(luò)請(qǐng)求都會(huì)在ViewModel里面這個(gè)時(shí)候就很當(dāng)然的要使用到數(shù)據(jù)模型Model悬荣,而數(shù)據(jù)和View的綁定邏輯放到ViewController里面,這就使得ViewController里面處理更多的是綁定關(guān)系疙剑,數(shù)據(jù)相關(guān)的操作都放到了ViewModel里面氯迂。耦合性相對(duì)比較低,View 層基本上可以脫離出來(lái) 進(jìn)行很高的復(fù)用性言缤。 這就是我認(rèn)為MVVM帶來(lái)最大的方便之處嚼蚀。低耦合 高內(nèi)聚, 而配上RAC的交互模式 管挟,我們可以把很多Block都省去掉轿曙, 降低了逆向綁定的成本。?


干巴巴說(shuō)了比較多后期如果有更深的理解會(huì)回來(lái)完善這片文章僻孝,最后給大家一個(gè)Demo祝大家學(xué)習(xí)愉快导帝!

資料組件化資料

同時(shí)歡迎大家加入移動(dòng)端學(xué)習(xí)QQ群:316834489

大量資料等你來(lái)拿

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市穿铆,隨后出現(xiàn)的幾起案子您单,更是在濱河造成了極大的恐慌,老刑警劉巖荞雏,帶你破解...
    沈念sama閱讀 211,123評(píng)論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件虐秦,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡凤优,警方通過查閱死者的電腦和手機(jī)悦陋,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,031評(píng)論 2 384
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)筑辨,“玉大人俺驶,你說(shuō)我怎么就攤上這事⊥诙猓” “怎么了痒钝?”我有些...
    開封第一講書人閱讀 156,723評(píng)論 0 345
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)痢毒。 經(jīng)常有香客問我送矩,道長(zhǎng),這世上最難降的妖魔是什么哪替? 我笑而不...
    開封第一講書人閱讀 56,357評(píng)論 1 283
  • 正文 為了忘掉前任栋荸,我火速辦了婚禮,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘晌块。我一直安慰自己爱沟,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,412評(píng)論 5 384
  • 文/花漫 我一把揭開白布匆背。 她就那樣靜靜地躺著呼伸,像睡著了一般。 火紅的嫁衣襯著肌膚如雪钝尸。 梳的紋絲不亂的頭發(fā)上括享,一...
    開封第一講書人閱讀 49,760評(píng)論 1 289
  • 那天,我揣著相機(jī)與錄音珍促,去河邊找鬼铃辖。 笑死,一個(gè)胖子當(dāng)著我的面吹牛猪叙,可吹牛的內(nèi)容都是我干的娇斩。 我是一名探鬼主播,決...
    沈念sama閱讀 38,904評(píng)論 3 405
  • 文/蒼蘭香墨 我猛地睜開眼穴翩,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼犬第!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起藏否,我...
    開封第一講書人閱讀 37,672評(píng)論 0 266
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤瓶殃,失蹤者是張志新(化名)和其女友劉穎充包,沒想到半個(gè)月后副签,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,118評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡基矮,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,456評(píng)論 2 325
  • 正文 我和宋清朗相戀三年淆储,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片家浇。...
    茶點(diǎn)故事閱讀 38,599評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡本砰,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出钢悲,到底是詐尸還是另有隱情点额,我是刑警寧澤,帶...
    沈念sama閱讀 34,264評(píng)論 4 328
  • 正文 年R本政府宣布莺琳,位于F島的核電站还棱,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏惭等。R本人自食惡果不足惜珍手,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,857評(píng)論 3 312
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧琳要,春花似錦寡具、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,731評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至课幕,卻和暖如春拯钻,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背撰豺。 一陣腳步聲響...
    開封第一講書人閱讀 31,956評(píng)論 1 264
  • 我被黑心中介騙來(lái)泰國(guó)打工粪般, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人污桦。 一個(gè)月前我還...
    沈念sama閱讀 46,286評(píng)論 2 360
  • 正文 我出身青樓亩歹,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親凡橱。 傳聞我的和親對(duì)象是個(gè)殘疾皇子小作,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,465評(píng)論 2 348

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