App架构(读书笔记)

最近细看了下Casa Taloyum写的View层架构设计,对其中提到的MVC、MVP、MVVM架构模式做了下总结,记录下自己的读书笔记。

MVC

谈到架构,就绕不开MVC架构,也可以说其他架构都是MVC架构的变形与优化,比如MVP、MVVM。MVC架构分为三部分:Model(数据管理)、View(视图管理)、Controller(控制器),三者之间的关系如下图:

1-1 mvc.png

从图中可以看出,Controller处在Model与View之间,负责协调Model与View的关系。那么MVC在移动端是怎么划分的呢?在服务器端View就是浏览器,显示视图给用户,但是在移动端没有浏览器,那么View放在哪里合适呢?iOS和Android都选择放在C里面了,iOS和Android都以View来充当View的容器(View Container),这也就解释了在iOS中命名Controller为UIViewController了,在Android中的C就是Activity。接下来看下三部分承担的职责如下:

M应该做的事:

  1. 给ViewController提供数据。
  2. 给ViewController存储数据提供接口。
  3. 提供经过抽象的业务基本组件,供Controller调度。

C应该做的事:

  1. 管理View Container的生命周期。
  2. 负责生成所有的View实例,并放入View Container。
  3. 监听来自View与业务有关的事件,通过与Model的合作,来完成对应事件的业务。

V应该做的事:

  1. 响应与业务无关的事件,并因此引发动画效果,点击反馈(如果合适的话,尽量还是放在View去做)等。
  2. 界面元素表达。

M的职责主要是取数据与存储数据,比如对网络数据进行存储。由于取数据与存数据的业务逻辑全部放在M中去处理,随着工程的庞大,M也会随之变大,也就是常说的胖Model。胖Model减轻了C要处理的事情,但是Model的复用率降低。有胖Model对应的就有瘦Model,瘦Model要达到的目的是,尽一切可能去编写细粒度Model,然后配套各种helper类或方法对弱业务做抽象,强业务依旧交给Controller。

在MVC架构中,随着软件规模的增大,C很容就变得很庞大很难测试很难维护,MVVM和MVP就是解为了解决这个问题。

MVVM

不管MVP、MVVM,它们的共识都是Controller会随着软件的成长,变得很大很难维护很难测试。MVVM是基于胖Model的架构思路建立的,然后在胖Model中拆出两部分:Model和ViewModel,从而使得Controller只需要专注于数据调配的工作,ViewModel则去负责数据加工并通过通知机制让View响应ViewModel的改变。

由于ViewModel本质上算是Model层,所以View并不适合直接持有ViewModel。另外一点是,ViewModel有可能并不是只服务于特定的一个View,使用更加松散的绑定关系能够降低ViewModel和View之间的耦合度。这也是大多数使用MVVM架构的都采用了ReactiveCocoa库的原因,因为ReactiveCocoa采用信号量机制使ViewModel和View之间松耦合。至此,大家可能有一个疑问,ViewModel和View之间已经能相互通信了,那Controller起到什么作用呢?如下所示:

View <-> Controller <-> ViewModel <-> Model

所以使用MVVM之后,就不需要Controller的说法是不正确的,严格来说MVVM其实是MVCVM。从图中可以得知,Controller夹在View和ViewModel之间做的其中一个主要事情就是将View和ViewModel进行绑定。在逻辑上,Controller知道应当展示哪个View,Controller也知道应该使用哪个ViewModel,然而View和ViewModel它们之间是互相不知道的,所以Controller就负责控制他们的绑定关系。Controller另一方面也负责常规的UI逻辑处理。

MVP

MVP跟MVVM差不多,分为Model、View、Present三部分,如下所示:

View <-> Controller <-> Present <-> Model

从上可以看出几乎和MVVM相似,但是两者还是有区别的,在MVVM中ViewModel与View之间通过ReactiveCocoa的信号量机制来进行交互的,而MVP中View与Present之间是通过依赖注入的方式来进行绑定的。在MVP中,通过抽出Present来处理部分的数据,从而达到了对Controller瘦身的目的。Android官方提供了MVP的demo供大家下载参考。下载地址

总结

所有的架构都源自于MVC,MVP、MVVM、MVCS等都是为了给Controller瘦身,把握住这一点,在理解其他架构模式方面就会游刃有余了。

参考文章

https://casatwy.com/iosying-yong-jia-gou-tan-viewceng-de-zu-zhi-he-diao-yong-fang-an.html

http://www.infoq.com/cn/articles/android-official-mvp-architecture-sample-project-analysis

国士梅花

欢迎大家关注国士梅花,技术路上与你陪伴。

guoshimeihua.jpg

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值