MVVM

MVVM是Model-View-ViewModel的简写。它本质上就是MVC 的改进版。MVVM 就是将其中的View 的状态和行为抽象化,让我们将视图 UI 和业务逻辑分开。当然这些事 ViewModel 已经帮我们做了,它可以取出 Model 的数据同时帮忙处理 View 中由于需要展示内容而涉及的业务逻辑。微软的WPF带来了新的技术体验,如Silverlight、音频、视频、3D、动画……,这导致了软件UI层更加细节化、可定制化。同时,在技术层面,WPF也带来了 诸如Binding、Dependency Property、Routed Events、Command、DataTemplate、ControlTemplate等新特性。MVVM(Model-View-ViewModel)框架的由来便是MVP(Model-View-Presenter)模式与WPF结合的应用方式时发展演变过来的一种新型架构框架。它立足于原有MVP框架并且把WPF的新特性糅合进去,以应对客户日益复杂的需求变化。

WPF的数据绑定与Presentation Model相结合是非常好的做法,使得开发人员可以将View和逻辑分离出来,但这种数据绑定技术非常简单实用,也是WPF所特有的,所以我们又称之为Model-View-ViewModel(MVVM)。这种模式跟经典的MVP(Model-View-Presenter)模式很相似,除了你需要一个为View量身定制的model,这个model就是ViewModel。ViewModel包含所有由UI特定的接口和属性,并由一个 ViewModel 的视图的绑定属性,并可获得二者之间的松散耦合,所以需要在ViewModel 直接更新视图中编写相应代码。数据绑定系统还支持提供了标准化的方式传输到视图的验证错误的输入的验证。
在视图(View)部分,通常也就是一个Aspx页面。在以前设计模式中由于没有清晰的职责划分,UI 层经常成为逻辑层的全能代理,而后者实际上属于应用程序的其他层。MVP 里的M 其实和MVC里的M是一个,都是封装了核心数据、逻辑和功能的计算关系的模型,而V是视图(窗体),P就是封装了窗体中的所有操作、响应用户的输入输出、事件等,与MVC里的C差不多,区别是MVC是系统级架构的,而MVP是用在某个特定页面上的,也就是说MVP的灵活性要远远大于MVC,实现起来也极为简单。
我们再从IView这个interface层来解析,它可以帮助我们把各类UI与逻辑层解耦,同时可以从UI层进入自动化测试(Unit/Automatic Test)并提供了入口,在以前可以由WinForm/Web Form/MFC等编写的UI是通过事件Windows消息与IView层沟通的。WPF与IView层的沟通,最佳的手段是使用Binding,当然,也可以使用事件;Presenter层要实现IView,多态机制可以保证运行时UI层显示恰当的数据。比如Binding,在程序中,你可能看到Binding的Source是某个interface类型的变量,实际上,这个interface变量引用着的对象才是真正的数据源。
MVC模式大家都已经非常熟悉了,在这里我就不赘述,这些模式也是依次进化而形成MVC—>MVP—>MVVM。有一句话说的好:当物体受到接力的时候,凡是有界面的地方就是最容易被撕下来的地方。因此,IView作为公共视图接口约束(契约)的一层意思;View则能传达解耦的一层意思。

MVVM优点
MVVM模式和MVC模式一样,主要目的是分离视图(View)和模型(Model),有几大优点

  1. 低耦合。视图(View)可以独立于Model变化和修改,一个ViewModel可以绑定到不同的"View"上,当View变化的时候Model可以不变,当Model变化的时候View也可以不变。
  2. 可重用性。你可以把一些视图逻辑放在一个ViewModel里面,让很多view重用这段视图逻辑。
  3. 独立开发。开发人员可以专注于业务逻辑和数据的开发(ViewModel),设计人员可以专注于页面设计,使用Expression Blend可以很容易设计界面并生成xaml代码。
  4. 可测试。界面素来是比较难于测试的,测试可以针对ViewModel来写

MVVM和MCV模式相关推荐

  1. [PyQt] MCV模式学习-0

    MCV模式学习-0 目的 item-based模式 0.0 QStringListModel 0.1 QAbstractListModel 0.2 目的 之前的PyQt采用的是item based形式 ...

  2. 探索从 MVC 到 MVVM + Flux 架构模式的转变

    在业务中一般 MVVM 框架一般都会配合上数据状态库(redux, mobx 等)一起使用,本文会通过一个小 demo 来讲述为什么会引人数据状态库. 从 MVC 到 MVVM 模式说起 传统 MVC ...

  3. android中MVC,MVP和MVVM三种模式详解析

    我们都知道,Android本身就采用了MVC模式,model层数据源层我们就不说了,至于view层即通过xml来体现,而 controller层的角色一般是由activity来担当的.虽然我们项目用到 ...

  4. 浅谈MVVM和MVC模式

    首先MVVM呢,我们可以理解为MVC的优化版,Angular就是基于MVC模式的框架,而VUE是基于MVVM模式的框架,是MVC模式的优化版,也是小白最容易上手的一个框架.  MVC模式: (Augl ...

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

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

  6. 移动开发架构之MVVM模式

    MVVM概念的提出和起源 MVVM是Model-View-ViewModel的简写,最早是由微软公司提出并运用,是MVP(Model-View-Presenter)模式与WPF结合的应用方式时发展演变 ...

  7. 玩转Android之MVVM开发模式实战,炫酷的DataBinding!

    原文:http://blog.csdn.net/u012702547/article/details/52077515 ---------------------------------------- ...

  8. 前端模式 VD, 脏检查 MVVM ,数据收集 MVVM 所使用的场合

    VD 虚拟DOM 数据变化,先修改虚拟DOM层,然后通过虚拟DOM树的对比检查获取出最小的修改量进行对真实DOM树进行修改.虚拟DOM模式只是在DOM层的检查,所以初始渲染速度非常快.在细小修改的大量 ...

  9. 一文带你全面了解MVC、MVP、MVVM模式(实例讲解)

    前言 在Android开发中,当你梳理完需求后,你要做的并不是马上写下你的第一行代码,而是需先设计好整个项目的技术框架 今天,我将全面介绍Android开发中主流的技术框架MVC.MVP 与 MVVM ...

最新文章

  1. 机会:新兴产业+大消费(转载)
  2. 你真的弄明白了吗?Java并发之AQS详解
  3. OpenCv调用摄像头拍照代码
  4. jboss war包放哪_如何将JBoss HR Employee Rewards项目放入云端
  5. POST方式提交乱码解决
  6. 教育|关于本科生科研的一些想法和建议
  7. FlashCache初探(一)
  8. 【React】设计高质量的React组件
  9. js去除空格12种方法
  10. fprom预测结果内容_启动子分析预测数据库
  11. php输入为空,ecshop搜索框内容为空提示用户输入内容
  12. 有太多工作要做,传蚂蚁集团IPO可能推迟至2022年
  13. 新松机器人袁_中科新松许小刚:智能协作机器人是中国机器人产业发展新节点...
  14. Android开发:Shape详细解读
  15. Apache Kylin使用总结
  16. css实现文字的水平垂直居中
  17. Geode 分布式缓存配置
  18. 局域网服务器系统克隆,Ghost局域网克隆详细步骤.doc
  19. 一个现代孔乙己的职场生涯
  20. Python 练手程序合集(三)

热门文章

  1. 基于知识图谱的知识泛化让AI学会“举一反三”
  2. python之sklearn学习笔记
  3. 分裂的史莱姆(二进制)
  4. deepin个性化设置
  5. 从 Quora 的 187 个问题中学习机器学习和NLP
  6. 为什么别人的移动开发效率是你的2倍?丨课程推广
  7. LeetCode 661. Image Smoother
  8. 重新加载script
  9. 第04课:组件和商品详情
  10. TF、keras两种padding方式:vaild和same