Model–view–viewmodel(wiki翻译)[通俗易懂]

Model–view–viewmodel(wiki翻译)

大家好,又见面了,我是你们的朋友全栈君。

(本文译自wiki百科Model–view–viewmodel词条,转载此文请注明原文和本文链接)

Model–view–viewmodel(MVVM) 是一个软件架构设计模式。

MVVM 是 Martin Fowler 的 Presentation Model 设计模式的一个演变。和 Fowler 的 Presentation Model 一样,MVVM 抽象了 view 的状态和行为。但是,和 Presentation Model 抽象一个 view 不依赖于一个特定的UI平台的做法相反,MVVM是由微软WPF 和 Silverlight 的架构师Ken Cooper 和 Ted Peters开发,是一种简化用户界面的事件驱动编程方式。

由John Gossman(同样也是WPF和Silverlight的架构师)与2005年在他的博客上发表。

MVVM 和 Presentation Model 都源自于 model–view–controller 模式(MVC)。MVVM 促进了 GUI 开发与业务逻辑或者后端逻辑的分离,MVVM 中的 viewmodel 是一个转值器(value converter);这意味着 viewmodel 负责暴露(转换)model 中的数据对象来让对象变得更容易管理和使用。从这方面来说,viewmodel 更像一个 model 而不是 view,并且处理了大多数 view 的显示逻辑。viewmodel 也可以实现一个中介者模式来组织访问围绕 view 支持下用例集的后端逻辑。

Model–view–viewmodel 也被称为 model–view–binder,尤其运用但不仅仅在 .NET 平台。ZK(一个 java 的 web 应用框架) 和KnockoutJS (一个JS库)便用到了model–view–binder.

MVVM模式的组成 Model Model 是指任何一个领域模型(domain model),它代表了真实情况的内容(一个面向对象的方法),或表示内容(以数据为中心的方法)的数据访问层。

View 就像在 MVC 和 MVP 模式下,view 就是用户界面(UI)。

Viewmodel ViewModel 是一个公开公共属性和命令的抽象的view。取代了 MVC 模式的 controller,或 MVP 模式的任命者(presenter),MVVM 有一个驱动。在 viewmodel 中,这种驱动传达视图和数据绑定的通信。此 viewmodel 已被描述为该 model 中的数据的状态。

Binder机制 MVVM 模式中包含了说明性数据和命令绑定机制。微软的做法中,binder是一种叫 XAML 的标记语言。binder 使得开发人员不需要去编写样板化的代码来同步视图模型和视图。如果在微软解决方案库外执行实施成功了,那么这种数据绑定机制就是促成这个模式得以发展的关键性因素。

基本原理 MVVM 设计中充分利用了 WPF 中数据绑定功能,通过从 view 层消除几乎所有的 GUI 代码(“代码后置”),以更好地促进将视图层从其它模式中分离出来开发。开发人员不再需要具有用户体验才能来编写GUI代码,他们可以用由应用开发人员开发和维护的框架中的标记语言(如 XAML),来创建数据和 viewmodel 绑定。这种角色的分离使得UX设计师专注于UX的需求而不是编程的逻辑。因此应用程序层可在多个工作流开发以提高生产率。即使代码库只有一个开发人员,对 view 和 model 的适当分离都会更有效率,因为用户界面通常变化频繁,而且在开发周期期间,终端用户的反馈时间也会比较迟。

MVVM模式视图在MVC中提供的分离功能开发的优点的基础上,同时利用数据绑定的优点和绑定数据的框架,以求达到一种尽可能接近的纯应用程序模型。它使用了 binder,viewmodel 和任何业务层“数据检查”功能来验证输入的数据。其结果是,model 和框架驱动尽可能多的操作以消除或减少其直接操纵view的应用逻辑(例如,代码后置)。

批评 对 MVVM 模式的批评是来自 MVVM 创建者 John Gossman,他指出,对于简单的用户界面操作,执行 MVVM 的花费“ 过头了”。他还指出,对于较大的应用,推广 viewmodel 变得更加困难。此外,他还说明大型应用项目里数据绑定可以引起相当大的内存消耗。

转载于:https://juejin.im/post/5b28c5346fb9a00e67149400

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/107463.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • 关于FEC驱动_FEC伍丰

    关于FEC驱动_FEC伍丰转载说是网络,其实是网卡驱动。而且是针对于FREESCALE芯片的FEC端的驱动,我不知道别的芯片厂商的FEC模块是怎么样的,但就我接触过的几款FREESCALE的芯片来看,比如基于POWERPC的860T和ARM系列的MX27等,他们的FEC有一个明显的特点就是都是由BD和一个DMA缓冲组成,而这个DMA是专用的,也就是只是给FEC使用,区别于芯片内的DMAC模块。我们先来从fec.c这个与

  • python全国计算机二级报名_python有证书考吗

    python全国计算机二级报名_python有证书考吗第一次参加全国计算机等级考试的考生对于网上报名的流程,对全国计算机考试流程中某些环节并不清楚,小编今天就整理下全国计算机等级考试流程及详细说明,提供网上报名流程示意图,解决大家在全国计算机等级考试报名过程中的疑问。(如有出入,请以官方信息为准)考生需登录各地计算机等级考试官方报名网站,进入“全国计算机等级考试报名系统”进行注册登录。(一)注册账号和登录一、注册ETEST通行证1.考生首次登录系…

  • Class类的getClassLoader()方法

    Class类的getClassLoader()方法packageminglu;importjava.lang.reflect.InvocationTargetException;importjava.lang.reflect.Method;publicclassHelloWorld{ publicstaticvoidmain(String[]args)throwsInstantiationException,

  • 什么是Unicode字符_Unicode格式字符是什么

    什么是Unicode字符_Unicode格式字符是什么写这篇博客的原因,从做软件开始,什么ASCII码,Unicode,UTF-8,UTF-16,UTF-32……这些鬼东西总是经常碰到,只知道这些鬼是编码格式,其他的就啥都不清楚了,既然总是遇

  • 最新 Linux 命令总结 大全[通俗易懂]

    今天,带来一篇Linux命令总结的非常全的文章,也是我们平时工作中使用率非常高的操作命令,命令有点多,建议小伙伴们可以先收藏后阅读。目录1.基本命令2.关机3.文件和目录4.文件搜索5.挂载一个文件系统6.磁盘空间7.用户和群组8.文件的权限使用“+”设置权限,使用“-”用于取消9.文件的特殊属性,使用“+”设置权限,使用“-”用于取消10.打包和压缩文件11.RPM包12.YUM软件包升级器13.deb包14.查看文件内容15.文本处理16

  • Java中利用DatagramPacket与DatagramSocket进行通讯的示例

    Java中利用DatagramPacket与DatagramSocket进行通讯的示例对以下demo进行了扩展,增了消息循环和等待。 Java中的DatagramPacket与DatagramSocket的初步扩展的代码如下:1.接收端工程代码:由于接收端的控制台log会被发送端的log冲掉,所以把log写到文件中。packagecom.ameyume.receiver;importjava.io.File;importjava.io.FileNotFoundExcep

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号