最近公司的項(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)拿