MVVM 参考资料Mvvm

MVC和MVVM

2015-12-29  本文已影响259人  勇往直前888

MVC

简介

MVC,全称是 Model View Controller,是模型 (model)-视图 (view)-控制器 (controller) 的缩写。

现在,MVC 已经成为主流的客户端编程框架,在 iOS 开发中,系统为我们实现好了公共的视图类:UIView,和控制器类:UIViewController。大多数时候,我们都需要继承这些类来实现我们的程序逻辑,因此,我们几乎逃避不开 MVC 这种设计模式。

mvc示意图.png

从上图可以看出,MVC的本质是将Model和View进行隔离

问题

  1. Controller很难复用
  2. 大量代码都集中在 Controller 之中,让 MVC 模式变成了 Massive View Controller 模式。

Controller 的核心工作

  1. 在初始化时,构造相应的 View 和 Model。
  2. 监听 Model 层的事件,将 Model 层的数据传递到 View 层。
  3. 监听 View 层的事件,并且将 View 层的事件转发到 Model 层。

Controller的本质是一个调度者,逻辑部分应该分离出去,从而达到瘦身的目的

MVVM

简介

MVVM 是 Model-View-ViewModel 的简写。

mvvm.png

将View和Controller合并来实现界面,分离出逻辑和数据部分,形成新的架构。从而达到让难复用的Controller瘦身的目的

MVVM 在使用当中,通常还会利用双向绑定技术,使得 Model 变化时,ViewModel 会自动更新,而 ViewModel 变化时,View 也会自动变化。所以,MVVM 模式有些时候又被称作:model-view-binder 模式。

具体在 iOS 中,可以使用 KVO 或 Notification 技术达到这种效果。

问题

  1. 数据绑定使得 Bug 很难被调试。你看到界面异常了,有可能是你 View 的代码有 Bug,也可能是 Model 的代码有问题。数据绑定使得一个位置的 Bug 被快速传递到别的位置,要定位原始出问题的地方就变得不那么容易了。
  2. 对于过大的项目,数据绑定需要花费更多的内存。

希望的做法

想法

采用MVVM的思想给Controller瘦身,但不引入ReactiveCocoa

  1. 基于输入( Signal)的处理方式和主流iOS开发方式差距太大
  2. 双线绑定技术带来的学习成本和额外复杂度,调试困难

做法

  1. 增加ViewModel,完成显示逻辑;
  2. 增加Logic辅助类,完成数据获取、转换等业务逻辑;
  3. 将网络、数据库等独立出来

三层开发模式

界面层开发

数据层开发

逻辑层开发

不同层中的Model

参考文章

被误解的 MVC 和被神化的 MVVM
MVVM 介绍
更轻量的 View Controllers

上一篇 下一篇

猜你喜欢

热点阅读