MVC
我们先看一下 MVC 的理想样子
>1. Model 数据模型
>2. View 视图: 涉及 UI
>3. Controller 控制器: 处理点击事件 View 生命周期管理等
从图中我们可以看到, Model 和 View 是完全隔离开的. 我们可以把 Controller 当作中间对象, 来负责 View 和 Model 的数据交互. 通俗点说, 就是 Controller 中网络请求, 请求回来后的数据, 生成模型, 模型再通过 Controlelr 传递给 View , 已达到数据显示在 View 上的功能. 相反, 当我们改变数据的时候, 也要通过 Controller 改变 Model.
在 Objective - C 中, 我们发现 当我们所创建的 Controlelr 为 ViewController , 这是个 View 和 Controller 的混合体. 那苹果为什么这么做呢, 原因在与 这个 ViewController 会提升开发效率, 把 View 和 Controller 绑定在一起, 直接在同一页面书写 View 以及 Controlelr 逻辑. 这样提高开发效率. 但随着业务的增长以及页面处理逻辑的增多, Controlelr 里会越来越臃肿, 业务也越来越复杂, 业务和 Controlelr 的耦合度越来越强. 甚至 Controller 里的代码会达到几千行. 一旦业务更改以及 UI 重构, 修改起来很困难. 所以人们就想到了把业务从 Controller 中分离出来. 就有了 MVVM . 以下我们先简单介绍下 MVVM.
MVVM
>1.Model
>2.View 负责 UI
>3.ViewModel 负责业务逻辑 以及与 View 进行绑定
在 OC 中 我们把 ViewController 作为 UI 的组装层 以及 View 与其 ViewModel 的绑定工作. 而在 ViewModel 中去请求网络数据, 当数据更改时, 因为 View 和 ViewModel 是进行绑定的, 所以当数据更改时, View 的数据同时更改. 这样的操作, 使原本在 ViewController 中的业务逻辑 放到了 ViewModel 中. 减轻了 ViewModel 的负担. 同时也分离出来了业务代码.
MVVC 相比于 MVC 优点:
** MVVC 是在 MVC 的基础上 抽离了 Controller 中的业务逻辑, 同时解除了 View 和 Controlelr 的耦合性, 利于单元测试以及逻辑梳理 *
MVVM 缺点:
严格意义上说 并不是 MVVM 的缺点, 一提到 MVVM 就让我们想到了 RAC , RAC 对于新手来说 确实不容易理解, 需要好好看看 RAC 的教程以及注意事项.
来源: https://juejin.im/post/5c947f5fe51d451cbb672adf