最近公司的項目又啟動了Native-IOS,假設(shè)了一套曾經(jīng)風(fēng)靡一時的Route+RAC+MVVM框架,站在自己的角度淺顯的聊一下項目架構(gòu)。
JLRoute
Route是一個帶有簡單的基于塊的API的URL路由庫。它旨在使您在應(yīng)用程序中以最少的代碼處理復(fù)雜的URL方案變得非常簡單。Route可以很方便的處理不同 URL schemes 以及解析它們的參數(shù),并通過回調(diào) block 來處理 URL 對應(yīng)的操作 , 是一個可以用于處理復(fù)雜跳轉(zhuǎn)邏輯的三方庫。
其基本邏輯是Route擁有一個全局的routeControllersMap。在這個Map里面我們提前注冊好相關(guān)的路由以及在Plist文件里配置好項目的schem。 進行對應(yīng)路由跳轉(zhuǎn)時候只需要輸入對應(yīng)ViewController的URL 就可以進行present 或者push跳轉(zhuǎn)。
其具體的使用方法JLRoute使用方法
總的來說Route的使用效果相對于在各個頁面之間進行 present 和 push 邏輯清晰很多。 我們可以根據(jù)Route的URL進行模塊分離和復(fù)用在路由層面也可以做很多數(shù)據(jù)統(tǒng)計等。同時可以省去導(dǎo)入頭文件的煩惱。 這也是當(dāng)初組件化的精髓之一(去頭文件)
當(dāng)然有利就有弊相對于傳統(tǒng)的方法路由的正向逆向傳值是一個挑戰(zhàn),解決方案各有不同對于
正向傳值可以通過URLParam也可以通過全局的對象字典進行跨控制器傳值。
逆向則可以通過RAC配合Notifaction進行高內(nèi)聚的代碼進行反向傳值。如下:
[[[[NSNotificationCenter defaultCenter] rac_addObserverForName:@"noti" object:nil] throttle:1] subscribeNext:^(id x) {
? ? ? ? NSLog(@"%@",x);
? }];
在外層VC注冊通知不過要記得移除觀察。
RAC
基于Stream通過面相協(xié)議編程實現(xiàn)的一個非常強大的函數(shù) + 響應(yīng) 編程第三方庫 。
在項目中pod 'ReactiveObjC', '~> 3.1.0' pod install 即可
具體的使用可以參考這位大佬的文章
RAC原理解析?在這里我只總結(jié)一下常用的幾個類和使用原則。
首先我們要了解冷信號和熱信號是什么RAC之冷信號和熱信號
RACSignal 冷信號, 我們自己寫項目的時候很少單獨把他拎出來寫。
RACSubject 這個是我們經(jīng)常用的類,這個類的特點就是單向傳播,在實際項目中的應(yīng)用主要是基于MVVM模式 結(jié)偶ViewModel和ViewController的數(shù)據(jù)傳遞以及viewModel和View的數(shù)據(jù)傳遞,說直接一點就是簡單的解決了單項綁定的問題, 并且邏輯非常清晰, 有幾個RACSubject就有幾個單項綁定。 我們使用時候在需要執(zhí)行Block的地方訂閱 例如
[self.viewModel.btnClickSingnal subscribeNext:^(id? _Nullable x) {
? ? ? ? NSLog(@"x信號? ? %@",x);
? ? }];
在數(shù)據(jù)源進行發(fā)送的地方使用
[self.btnClickSingnal sendNext:@"你要發(fā)送的信息"]; 就可以了。
講完了單向綁定和數(shù)據(jù)傳值雙向綁定和數(shù)據(jù)傳值就很好理解了, 無非就是在單向傳值的訂閱方也提供一個發(fā)送逆向傳值的send方法 這時候我們就需要使用到RACCommand.使用方法很簡單。 在上面的鏈接里面也分享了相關(guān)的使用方法。 總結(jié)下來就是,控制器傳值用RAC配合Notifaction,View ViewModel ViewController之間單向綁定傳值就用RacSubject 雙向綁定傳值就用RaCCommand.
MVVM
MVVM即Model View ViewModel的縮寫, 是一種常用的架構(gòu)設(shè)計,它最大的優(yōu)點就是數(shù)據(jù)視圖分離, 使得ViewController中的代碼變得很少并且邏輯清晰。把數(shù)據(jù)的處理都丟到ViewModel里面 包括一些數(shù)據(jù)的渲染和邏輯處理也都丟到ViewModel里面。
通常情況下ViewModel和Model是在一起使用的 因為一般的網(wǎng)絡(luò)請求都會在ViewModel里面這個時候就很當(dāng)然的要使用到數(shù)據(jù)模型Model,而數(shù)據(jù)和View的綁定邏輯放到ViewController里面,這就使得ViewController里面處理更多的是綁定關(guān)系,數(shù)據(jù)相關(guān)的操作都放到了ViewModel里面。耦合性相對比較低,View 層基本上可以脫離出來 進行很高的復(fù)用性。 這就是我認為MVVM帶來最大的方便之處。低耦合 高內(nèi)聚, 而配上RAC的交互模式 ,我們可以把很多Block都省去掉, 降低了逆向綁定的成本。?
干巴巴說了比較多后期如果有更深的理解會回來完善這片文章,最后給大家一個Demo祝大家學(xué)習(xí)愉快!
資料組件化資料
同時歡迎大家加入移動端學(xué)習(xí)QQ群:316834489
大量資料等你來拿
