iOS MVVM与MVC

作者: codychen123 | 来源:发表于2016-11-24 01:37 被阅读611次
MVVM示意图

MVC

  • MVC结构图
MVC示意图.png
  • 从图中我们可以看出控制器(Controller)主要负责数据的交互和与视图的交互,模型(Model)负责传递数据,视图(View)负责接收控制器的指令并展示数据。

MVC的缺点

  • 模型的代码很少
  • 控制器的代码一不小心就会越来越多
  • 代码冗余率高,不好测试

MVVM

  • MVVM是Model-View-ViewModel的简写,MVVM模式和MVC模式一样,主要目的是分离视图(View)模型(Model)

MVVM结构图

MVVM示意图.png

MVVM概念

  • 在MVVM中,viewview controller正式联系在一起,我们把它们视为一个组件
  • viewview controller都不能直接引用model,而是引用视图模型
  • view model可以放置用户输入验证逻辑,视图显示逻辑,发起网络请求和其他代码

MVVM使用注意事项

  • view引用view model,但是反过来就不行
  • view model引用了model,但是反过来就不行

MVVM的优点

  • 低耦合: View可以独立于Model变化和修改,一个ViewModel可以绑定到不同的View 上,降低代码冗余率。
  • 可重用性: 可以把一些视图逻辑放在一个ViewModel里面,让很多View重用这段视图逻辑,提高代码效率。
  • 独立开发:开发人员可以专注于业务逻辑和数据的开发ViewModel里面,设计人员可以专注于页面设置,提高人员效率。
  • 可测试: 通常界面是比较难测试,而MVVM模式可以针对ViewModel来进行测试

MVVM的缺点

  • 类会增多
  • 同MVC一样,ViewModel会越来越大,里面的逻辑、方法、属性会越来越多
  • MVVM相对于MVC,层级分明,承担了Controller的部分逻辑,并且ViewModel可以当做模板供其他类使用,代表调用复杂度会增加,因为跟MVC的思想不太一样。

相关文章

网友评论

  • Arex:没有说最重要的,ViewModel和Model View和ViewMode是怎么通讯的
  • WalterT:model 是怎么 唤醒 controller 的?
    codychen123:@WalterT
    1.在MVC中,一般是Model类里面存放数据的模型,在Controller里面监听,并且从网络接口获取数据转成model,然后通知View更新数据
    2.MVVM中是ViewModel把刚才发生的逻辑和数据封装起来了
  • snowimba:MVVM有什么缺点?
    codychen123:@snowimba 好的谢谢提醒
    snowimba:@ioshuihui 这些希望也可以加到文章里面,避免一些新手赶时髦在生产一线就独树一帜的用MVVM。我碰到的最大问题就view的数据刷新,感觉用了MVVM以后加载数据去刷新view明显有很大延迟,这个问题我在大佬博客也看到过。
    codychen123:@snowimba 1.类会增多
    2.同MVC一样,ViewModel会越来越大,里面的逻辑、方法、属性会越来越多
    3.MVVM相对于MVC,层次分明,承担了Controller的部分逻辑,并且ViewModel可以当做模板供其他类使用,代表调用复杂度会增加,因为跟MVC的思想不太一样。

本文标题:iOS MVVM与MVC

本文链接:https://www.haomeiwen.com/subject/hlcbpttx.html