浅谈MVVM软件架构

MVC:

Model View Controller 模型-视图-控制器,也可以理解成Massive View Controller(重量级视图控制器)

详细内容参考以下苹果官方文档(已翻译)

Model-View-Controller

Model-View-Controller(二)


MVC的缺点:

视图对象通常在一个MVC应用程序中和模型对象是低耦合的,它们之间的通信都是通过控制器对象来完成的,这中间还有很多琐碎的事情,例如从网络或者数据库等获取原始数据,以及将原始的Model数据转换成View可以直接用的数据模型,比如说时间是一个长整型的数字,要转换成2016-08-26 12:12:12这样的格式化的字符串等一系列逻辑处理,数据模型变化时更新数据库等。控制器做了太多的工作,导致有时候我们的一个控制器类特别的大,因此就有了MVVM。

PS:在iOS中,苹果提供了UIViewController类,它拥有控制器和视图两种角色,被称为一个视图控制器,它主要关注的是视图层。它“拥有”界面(视图);它的主要职责是管理界面和与模型的通信。有关在视图中的数据显示的操作方法通常在视图控制器中实现。


MVVM:

Model-View-ViewModel 

Model:同MVC的模型对象

View:同MVC的视图对象

ViewModel:(持有Model对象,并且不对外暴露)它的职责之一就是作为一个表现视图显示自身所需数据的静态模型;但它也有收集, 解释和转换那些数据的责任.例如前面讲到的将Model数据转换成View可以直接用的数据模型等琐碎的事情, 这留给了 view (controller) 一个更加清晰明确的任务: 呈现由 view-model 提供的数据。现在视图控制器仅关注于用 view-model 的数据配置和管理各种各样的视图,view-model 会在视图控制器上以一个属性的方式存在. 视图控制器知道 view-model 和它的公有属性, 但是 view-model 对视图控制器一无所知.


MVVM图解:



这个图解准确地描述了什么是 MVVM:一个 MVC 的增强版,我们正式连接了视图和控制器,并将表示逻辑从 Controller 移出放到一个新的对象里,即 View Model。ViewModel是一个放置用户输入验证逻辑,视图显示逻辑,发起网络请求和其他各种各样的代码的极好的地方.

PS:个人觉得可以将它理解成MVVMC(模型-视图-视图模型-控制器),它只是在MVC的基础上多了一个视图模型层,而这个多出来的VM层分担了一部分控制器对象的工作,这样控制器就不再那么臃肿。

MVC和MVVM的区别就在于,MVC将控制器对象要呈现的数据的数据处理过程交给的一个新的ViewModel层,而自己只做展示处理,不做数据处理;因此它们能够很好的兼容;这样Controller就瘦了,不是吗?



MVVC的优点:

1.兼容MVC

2.可测试性

3.代码可读性,减少代码复杂性


参考资料:

http://www.cocoachina.com/ios/20150526/11930.html

https://objccn.io/issue-13-1/

http://www.cnblogs.com/brycezhang/p/3840567.html

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值