一、MVVM概述  
 
MVVM 到底是什么?我们首先看一下MVC架构:
我们看到的是一个典型的 MVC 设置。Model 呈现数据,View 呈现用户界面,而 View Controller 调节它两者之间的交互。Cool!
稍微考虑一下,虽然 View 和 View Controller 是技术上不同的组件,但它们几乎总是手牵手在一起,成对的。你什么时候看到一个 View 能够与不同 View Controller 配对?或者反过来?所以,为什么不正规化它们的连接呢?
这更准确地描述了你可能已经编写的 MVC 代码。但它并没有做太多事情来解决 iOS 应用中日益增长的重量级视图控制器的问题。在典型的 MVC 应用里,许多逻辑被放在 View Controller 里。它们中的一些确实属于 View Controller,但更多的是所谓的“表示逻辑(presentation logic)”,以 MVVM 属术语来说,就是那些将 Model 数据转换为 View 可以呈现的东西的事情,例如将一个 NSDate 转换为一个格式化过的 NSString。
我们的图解里缺少某些东西,那些使我们可以把所有表示逻辑放进去的东西。我们打算将其称为 “View Model” —— 它位于 View/Controller 与 Model 之间:
                      
看起好多了!这个图解准确地描述了什么是 MVVM:一个 MVC 的增强版,我们正式连接了视图和控制器,并将表示逻辑从 Controller 移出放到一个新的对象里,即 View Model。MVVM 听起来很复杂,但它本质上就是一个精心优化的 MVC 架构,而 MVC 你早已熟悉。
        MVVM模式中取消了控制器的概念,将View和ViewController整合成了View的概念,因为在iOS开发中,UIViewController本来就是Controller和View的一个集合。
二、MVVM实现
现在我们知道了什么是 MVVM,但为什么我们会想要去使用它呢?在 iOS 上使用 MVVM 的动机,对我来说,无论如何,就是它能减少 View Controller 的复杂性并使得表示逻辑更易于测试。通过一些例子,我们将看到它如何达到这些目标。
此处有三个重点是我希望你看完本文能带走的:
      (1)MVVM 可以兼容你当下使用的 MVC 架构。
      (2)MVVM 增加你的应用的可测试性。
      (3)MVVM 配合一个绑定机制效果最好。 
如我们之前所见,MVVM 基本上就是 MVC 的改进版,所以很容易就能看到它如何被整合到现有使用典型 MVC 架构的应用中。让我们看一个简单的 Person Model 以及相应的 View Controller:
Cool!现在我们假设我们有一个 PersonViewController ,在 viewDidLoad 里,只需要基于它的 model 属性设置一些 Label 即可。
这全都直截了当,标准的 MVC。现在来看看我们如何用一个 View Model 来增强它。
我们的 View Model 的实现大概如下:
Cool!我们已经将 viewDidLoad 中的表示逻辑放入我们的 View Model 里了。此时,我们新的 viewDidLoad 就会非常轻量:
所以,如你所见,并没有对我们的 MVC 架构做太多改变。还是同样的代码,只不过移动了位置。它与 MVC 兼容,带来更轻量的 View Controllers。
以上转载自:http://mobile.51cto.com/iphone-475071.htm

iOS-MVVM-模式介绍相关推荐

  1. Extjs 6.2 实战 (二)MVVM模式介绍

    MVVM是模型(Model).视图(View)和视图模型(ViewModel)的缩写,是一种软件设计模式. MVVM主要作用就是简化事件驱动变成的用户界面开发. 它把软件系统划分为模型.视图和视图模型 ...

  2. vue.js MVVM模式介绍及案例

    1.vue.js是什么: Vue.js (读音 /vjuː/,类似于 view) 是一套构建用户界面的渐进式框架.与其他重量级框架不同的是,Vue 采用自底向上增量开发的设计.Vue 的核心库只关注视 ...

  3. iOS进阶之架构设计MVVM模式仿新闻项目(6)

    这是MVVM的第三篇文章了,之所以花这么多文章来介绍MVVM,就是为了加深对MVVM的理解,以及从不同demo的角度,对比分析那种是最适合自己的模式. 转自文章 iOS使用MVVM模式仿新闻项目 一. ...

  4. iOS平台上的MVVM模式(译文)

    转载自:http://www.teehanlax.com/blog/model-view-viewmodel-for-ios/ Written by Ash Furrow on January 14, ...

  5. iOS 框架模式(简述 MVC,MVP,MVVM 和 VIPER)

    写在前面的话 最近看了一篇国外大牛写的关于 iOS 框架模式的文章,内容涉及目前 iOS 端诸多主流的框架模式,个人感觉文章写的很不错,收获匪浅,希望能够通过翻译原文的方式更好的体会一下,也分享给更多 ...

  6. iOS 框架模式(简述 MVC,MVP,MVVM 和 VIPER CDD)

    最近看了一篇国外大牛写的关于 iOS 框架模式的文章,内容涉及目前 iOS 端诸多主流的框架模式,个人感觉文章写的很不错,收获匪浅,希望能够通过翻译原文的方式更好的体会一下,也分享给更多的人参考.原文 ...

  7. iOS 架构模式 - 简述 MVC, MVP, MVVM

    Make everything as simple as possible, but not simpler - Albert Einstein,把每件事,做简单到极致,但又不过于简单 - 阿尔伯特· ...

  8. iOS 架构模式 - 简述 MVC, MVP, MVVM 和 VIPER (译)

    在使用 iOS 的 MVC 时候感觉怪怪的?想要尝试下 MVVM?之前听说过 VIPER,但是又纠结是不是值得去学? 继续阅读,你就会知道上面问题的答案 - 如果读完了还是不知道的话,欢迎留言评论. ...

  9. [iOS][转]iOS 架构模式 - 简述 MVC, MVP, MVVM 和 VIPER (译)

    转自: https://segmentfault.com/a/1190000004680605?ref=myread Make everything as simple as possible, bu ...

  10. WPF自学入门(十一)WPF MVVM模式Command命令 WPF自学入门(十)WPF MVVM简单介绍...

    WPF自学入门(十一)WPF MVVM模式Command命令 在WPF自学入门(十)WPF MVVM简单介绍中的示例似乎运行起来没有什么问题,也可以进行更新.但是这并不是我们使用MVVM的正确方式.正 ...

最新文章

  1. JSTL标准标签库的国际化标签
  2. boost::mp11::mp_map_keys相关用法的测试程序
  3. windows系统路径环境变量
  4. 【laravel5.4】重定向带参数
  5. Debug Assertion Failed _CrtlsValidHeapPointer(block) realloc堆引发的错误
  6. Static静态---笔记A
  7. 关于泰勒展开的两点思考
  8. python常用排序_python中的各种排序
  9. 单位阶跃信号是周期信号吗_直流散热风扇的信号你知道如何控制吗?
  10. c语言的指针思维导图,指针基础知识(含思维导图)
  11. 同花顺python_Python预测股票价格
  12. 大一 C语言 实验1
  13. QQ快速登录协议分析以及风险反思
  14. java阿里天气接口_天气预报接口
  15. UITextField格式化银行卡号码解决方案
  16. 2021年中国巴豆酸市场趋势报告、技术动态创新及2027年市场预测
  17. 解决阿里云端口不通 配置安全组无效
  18. python爬虫——汽车之家数据
  19. web前端之CSS3
  20. element文件的下载

热门文章

  1. 基于MATLAB的Sobel边缘检测算法实现
  2. Openstack入门篇(十一)之neutron服务(控制节点)的部署与测试
  3. 记使用talend从oracle抽取数据时,数字变为0的问题
  4. UVA3942 Remember the Word
  5. UIAlertAction添加输入框
  6. JSTL标签库中fmt标签,日期,数字的格式化
  7. DevExpress控件库----AlertControl提示控件
  8. 3月任务--target
  9. PHP中的中文截取乱码问题_gb2312_utf-8
  10. Oracle Stream Replication技术