MVVM模式中ViewModel和View、Model有什么区别?

 更新时间:2015年06月19日 09:52:19   投稿:junjie  
这篇文章主要介绍了MVVM模式中ViewModel和View、Model有什么区别?本文分别解释了它们的功能和作用,然后总结了它之间的区别,需要的朋友可以参考下

Model:很简单,就是业务逻辑相关的数据对象,通常从数据库映射而来,我们可以说是与数据库对应的model。

View:也很简单,就是展现出来的用户界面。

基本上,绝大多数软件所做的工作无非就是从数据存储中读出数据,展现到用户界面上,然后从用户界面接收输入,写入到数据存储里面去。所以,对于数据存储(model)和界面(view)这两层,大家基本没什么异议。但是,如何把model展现到view上,以及如何把数据从view写入到model里,不同的人有不同的意见。

MVC派的看法是,界面上的每个变化都是一个事件,我只需要针对每个事件写一堆代码,来把用户的输入转换成model里的对象就行了,这堆代码可以叫controller。

而MVVM派的看法是,我给view里面的各种控件也定义一个对应的数据对象,这样,只要修改这个数据对象,view里面显示的内容就自动跟着刷新,而在view 里做了任何操作,这个数据对象也跟着自动更新,这样多美。所以:

ViewModel:就是与界面(view)对应的Model。因为,数据库结构往往是不能直接跟界面控件一一对应上的,所以,需要再定义一个数据对象专门对应view上的控件。而ViewModel的职责就是把model对象封装成可以显示和接受输入的界面数据对象。

至于viewmodel的数据随着view自动刷新,并且同步到model里去,这部分代码可以写成公用的框架,不用程序员自己操心了。

简单的说,ViewModel就是View与Model的连接器,View与Model通过ViewModel实现双向绑定。

相关文章

  • JS中进行字符串替换的方法

    JS中进行字符串替换的方法

    replace() 方法用于在字符串中用一些字符替换另一些字符,或替换一个与正则表达式匹配的子串,这篇文章主要介绍了js中进行字符串替换的方法,需要的朋友可以参考下
    2024-01-01
  • js获取表格的行数和列数的方法

    js获取表格的行数和列数的方法

    这篇文章主要介绍了js获取表格的行数和列数的方法,需要的朋友可以参考下
    2015-10-10
  • jQuery实现为控件添加水印文字效果(附源码)

    jQuery实现为控件添加水印文字效果(附源码)

    这篇文章主要介绍了jQuery实现为控件添加水印文字效果的方法,涉及jQuery插件jquery.tinywatermark.js的使用技巧,并提供了源码供读者下载参考,需要的朋友可以参考下
    2015-12-12
  • html中使用javascript调用本地程序(exe、doc等)实现代码

    html中使用javascript调用本地程序(exe、doc等)实现代码

    调用本地程序(exe,doc等)使用html中的javascript实现,不可思议吧,接下来为大家详细介绍下,感兴趣的朋友可以参考下哈
    2013-04-04
  • JavaScript如何获取到导航条中HTTP信息

    JavaScript如何获取到导航条中HTTP信息

    这篇文章主要为大家详细介绍了JavaScript如何获取到导航条中HTTP信息,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-10-10
  • 自动更新作用

    自动更新作用

    自动更新作用...
    2006-10-10
  • JS实现类似51job上的地区选择效果示例

    JS实现类似51job上的地区选择效果示例

    这篇文章主要介绍了JS实现类似51job上的地区选择效果,结合完整实例形式分析了javascript基于鼠标事件响应实现页面元素动态变换的相关操作技巧,需要的朋友可以参考下
    2016-11-11
  • javascript显式类型转换实例分析

    javascript显式类型转换实例分析

    这篇文章主要介绍了javascript显式类型转换,实例分析了javascript实现类型转换的常用技巧,非常具有实用价值,需要的朋友可以参考下
    2015-04-04
  • 关于Function中的bind()示例详解

    关于Function中的bind()示例详解

    其实所谓bind顾名思义就是绑定。bind()方法会创建一个新函数,当这个新函数被调用时,它的this值是传递给bind()的第一个参数,它的参数是bind()的其他参数和其原本的参数。这么说可能很多人都糊涂了,下面通过这篇文章的示例来给大家详细的介绍下吧。
    2016-12-12
  • 深入了解JavaScript代码覆盖

    深入了解JavaScript代码覆盖

    这篇文章主要介绍了深入了解JavaScript代码覆盖 ,代码覆盖提供有关是否以及可选地应用程序的某些部分被执行的频率的信息。它通常用于判定一个测试套件执行特定代码库的全面程度。,需要的朋友可以参考下
    2019-06-06

最新评论