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

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

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

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • TCP/IP及内核参数优化调优

    TCP/IP及内核参数优化调优

    2022年2月9日
    36
  • LDAP统一认证服务解决方案[通俗易懂]

    LDAP是什么首先LDAP是一种通讯协议,LDAP支持TCP/IP。协议就是标准,并且是抽象的。在这套标准下,AD(ActiveDirectory)是微软出的一套实现。 那AD是什么呢?暂且把它理解成是个数据库。也有很多人直接把LDAP说成数据库(可以把LDAP理解成存储数据的数据库)。像是其他数据库一样,LDAP也是有client端和server端。server端是用来存放资源,client端用来操作增删改查等操作。 而我们通常说的LDAP是指运行这个数据库的服务器。 可以简单理解AD=LD

    2022年4月8日
    62
  • Java静态变量存储在内存中的什么位置?「建议收藏」

    Java静态变量存储在内存中的什么位置?「建议收藏」静态成员变量存储在堆的永久生成区域中。这是因为static不属于对象而是属于类,所以它被认为是类定义的一部分。如果静态变量是基元类型,它们将存储在permGen中。如果静态变量是一个引用变量,例如staticPersonobj=newPerson(),那么reference变量obj将被存储在permGen中,新创建的objected将被放置在年轻一代中。…

    2022年6月12日
    64
  • Nginx/Apache 和Apache Tomcat 的区别

    Nginx/Apache 和Apache Tomcat 的区别参考文献:https://www.kancloud.cn/hx78/java-web/335879Nginx/Apache和ApacheTomcat的区别 一、Nginx/Apache是WebServer,而ApacheTomact是一个servletcontainer想请教下,具体区别呢?因为如果使用了ApacheTomact的话已经具备响应httpreques…

    2022年6月9日
    38
  • python基础(9)增强型赋值与使用普通赋值的区别[通俗易懂]

    python基础(9)增强型赋值与使用普通赋值的区别[通俗易懂]前言增强型赋值语句是经常被使用到的,因为从各种学习渠道中,我们能够得知i+=1的效率往往要比i=i+1更高一些(这里以+=为例,实际上增强型赋值语句不仅限于此)。所以我们会乐此不

    2022年7月29日
    5
  • JavaWeb专栏之(三):Eclipse创建JavaWeb项目「建议收藏」

    JavaWeb专栏之(三):Eclipse创建JavaWeb项目「建议收藏」JavaWeb专栏之(三):Eclipse创建JavaWeb项目前言:关注:《遇见小Du说》微信公众号,分享更多Java知识,不负每一次相遇。更多内容请访问:www.dushunchang.top在上一篇文章中,小Du猿带大家使用Idea创建JavaWeb项目,相比之下Idea作为当前非常主流的开发IDE,深受Java后端程序员使用。市面上约75%开发者使用Idea,一代开发神器Eclipse就此没落。小Du猿第一次使用的开发IDE就是Eclipse,也算是我的启蒙神器。今天就带了使

    2022年6月18日
    24

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

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