【架构】浅谈IOS之ROUTE+RAC+MVVM

最近公司的项目又启动了Native-IOS,假设了一套曾经风靡一时的Route+RAC+MVVM框架,站在自己的角度浅显的聊一下项目架构。


JLRoute

Route是一个带有简单的基于块的API的URL路由库。它旨在使您在应用程序中以最少的代码处理复杂的URL方案变得非常简单。Route可以很方便的处理不同 URL schemes 以及解析它们的参数,并通过回调 block 来处理 URL 对应的操作 , 是一个可以用于处理复杂跳转逻辑的三方库。

基本逻辑是Route拥有一个全局的routeControllersMap。在这个Map里面我们提前注册好相关的路由以及在Plist文件里配置好项目的schem。 进行对应路由跳转时候只需要输入对应ViewController的URL 就可以进行present 或者push跳转。

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

总的来说Route的使用效果相对于在各个页面之间进行 present 和 push 逻辑清晰很多。 我们可以根据Route的URL进行模块分离和复用在路由层面也可以做很多数据统计等。同时可以省去导入头文件的烦恼。 这也是当初组件化的精髓之一(去头文件)

当然有利就有弊相对于传统的方法路由的正向逆向传值是一个挑战,解决方案各有不同对于

正向传值可以通过URLParam也可以通过全局的对象字典进行跨控制器传值。

逆向则可以通过RAC配合Notifaction进行高内聚的代码进行反向传值。如下:

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

        NSLog(@"%@",x);

  }];

在外层VC注册通知不过要记得移除观察。


RAC

基于Stream通过面相协议编程实现的一个非常强大的函数 + 响应 编程第三方库 。

在项目中pod 'ReactiveObjC', '~> 3.1.0' pod install 即可

具体的使用可以参考这位大佬的文章

RAC原理解析 在这里我只总结一下常用的几个类和使用原则。

首先我们要了解冷信号和热信号是什么RAC之冷信号和热信号

RACSignal 冷信号, 我们自己写项目的时候很少单独把他拎出来写。

RACSubject 这个是我们经常用的类,这个类的特点就是单向传播,在实际项目中的应用主要是基于MVVM模式 结偶ViewModel和ViewController的数据传递以及viewModel和View的数据传递,说直接一点就是简单的解决了单项绑定的问题, 并且逻辑非常清晰, 有几个RACSubject就有几个单项绑定。 我们使用时候在需要执行Block的地方订阅 例如

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

        NSLog(@"x信号    %@",x);

    }];

在数据源进行发送的地方使用

[self.btnClickSingnal sendNext:@"你要发送的信息"]; 就可以了。

讲完了单向绑定和数据传值双向绑定和数据传值就很好理解了, 无非就是在单向传值的订阅方也提供一个发送逆向传值的send方法 这时候我们就需要使用到RACCommand.使用方法很简单。 在上面的链接里面也分享了相关的使用方法。 总结下来就是,控制器传值用RAC配合Notifaction,View ViewModel ViewController之间单向绑定传值就用RacSubject 双向绑定传值就用RaCCommand.



MVVM

MVVM即Model View ViewModel的缩写, 是一种常用的架构设计,它最大的优点就是数据视图分离, 使得ViewController中的代码变得很少并且逻辑清晰。把数据的处理都丢到ViewModel里面 包括一些数据的渲染和逻辑处理也都丢到ViewModel里面。

通常情况下ViewModel和Model是在一起使用的 因为一般的网络请求都会在ViewModel里面这个时候就很当然的要使用到数据模型Model,而数据和View的绑定逻辑放到ViewController里面,这就使得ViewController里面处理更多的是绑定关系,数据相关的操作都放到了ViewModel里面。耦合性相对比较低,View 层基本上可以脱离出来 进行很高的复用性。 这就是我认为MVVM带来最大的方便之处。低耦合 高内聚, 而配上RAC的交互模式 ,我们可以把很多Block都省去掉, 降低了逆向绑定的成本。 


干巴巴说了比较多后期如果有更深的理解会回来完善这片文章,最后给大家一个Demo祝大家学习愉快!

资料组件化资料

同时欢迎大家加入移动端学习QQ群:316834489

大量资料等你来拿

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 222,104评论 6 515
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 94,816评论 3 399
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 168,697评论 0 360
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 59,836评论 1 298
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 68,851评论 6 397
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 52,441评论 1 310
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,992评论 3 421
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,899评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 46,457评论 1 318
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 38,529评论 3 341
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,664评论 1 352
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 36,346评论 5 350
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 42,025评论 3 334
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 32,511评论 0 24
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,611评论 1 272
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 49,081评论 3 377
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 45,675评论 2 359

推荐阅读更多精彩内容