iOS之MV(X) 架构理解分析

2017-05-31  本文已影响69人  大大盆子

前言

相信很多iOS开发者从学习iOS开始就是用的MVC架构,因为Apple推荐使用MVC,原因:上手快,且开发效率高。但是在开发过程中求速度,并没有严格的遵守MVC原则,随着APP的不断更新迭代,导致了Controller变成了集Model,View,Controller的一个大集合,代码维护也变得很难受,网络请求,数据存储和处理,业务逻辑,用户交互等基本都是在控制器里面处理,以致几千行的控制器屡见不鲜,这样既不好查找bug,也不利于单元测试。所以我去重新认识了一下MVC,也去学习了一下MVP以及MVVM。

基本要素

上面提到的数据层展示层业务层,其实就是针对模块分类而言的三层架构;而MV(X)这种层次划分,主要是针对数据流动的方向而言的。


MVC

一个标准的MVC它的结构及交互是这样的



当View接收到用户操作指令时,View移交给Controller处理,Controller去更新Model,Model更新之后通知Controller,控制器再去更新View。我们可以看到:

上面提到了胖Model,其实就是指Model做的事情较多,包含了一些弱业务,Controller从Model中拿到的数据,不用做额外的或者非常少的处理,就可以直接应用在View上;那么相应的就有瘦Model,它仅仅只是表达数据的作用。说到这里那么就顺便提一下MVCS架构模式,它也是MVC的一个变种,从Model中拆出一个Store,专门负责数据拉取和处理,而原来那个胖Model也变成了瘦Model,只是用来承载数据,这样Model的维护成本就会变得很低。因为变化也不是很大,就不单独拿出来说了。

小结

我觉得在Controller非常臃肿的问题上,MVC不应该背这个锅!,只是开发者没有严格按照MVC的原则来使用。那么为什么又会衍生出各种架构模式,我觉得问题还是在Controller上,因为iOS中Controller叫做UIViewController,尽管我们可以分出一个主View出来做布局及展示逻辑,但是它毕竟自带一个View且管理着它们的生命周期(viewWillAppear,viewWillDisappear等等),所以C跟V之间的联系还是过于紧密。


MVP

还是先看图吧,毕竟一图胜千言!



我们发现MVP跟MVC数据流向的方式是一致的,只是流向的对象有点不一样。那么实质上做了什么改变呢?

小结

MVP跟MVC他们的区别就是,MVP把Controller当做一个View来看待,因为它们本身的联系就很紧密,从而避免了Controller的职责模糊。另外View跟Presenter有一层协议关系,所以代码量相对来说也会增加。


MVVM


我们又发现MVVM跟MVP很相似:

不同的是:

小结

ViewModel的职责之一就是作为一个表现视图显示自身所需要的静态模型,它有收集,解释和转换那些数据的责任。另外,绑定可以通过KVO来实现,但是有点笨重,可以使用FBKVOController,其实更多的还是通过RAC来做,更能体现MVVM的精髓,也简化了很多的代码。


总结

不管是什么架构模式,他们都是围绕着用户交互->数据处理->界面更新来进行的,只是各自的方式不一样。

上一篇 下一篇

猜你喜欢

热点阅读