简单讨论一下MVC 与 MVVM

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 的教程以及注意事项。

猜你喜欢

转载自juejin.im/post/5c947f5fe51d451cbb672adf