美文网首页
【架构】浅谈IOS之ROUTE+RAC+MVVM

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

作者: 九月oc | 来源:发表于2021-11-02 11:56 被阅读0次

最近公司的项目又启动了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

大量资料等你来拿

相关文章

网友评论

      本文标题:【架构】浅谈IOS之ROUTE+RAC+MVVM

      本文链接:https://www.haomeiwen.com/subject/vjzzaltx.html