前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >每日一面试题之Day1

每日一面试题之Day1

原创
作者头像
守护最温柔的金木
修改2021-10-13 18:07:55
2990
修改2021-10-13 18:07:55
举报
文章被收录于专栏:all web technology

简述MVVM

PS:很多人去面试的时候,面试官问你的题目里大多数都会带着一题,他会问你,什么叫mvvm,你对mvvm有多少的了解。我身边也有不少的人和我说,不管是一年经验的,还是两三年经验的都会被问道,因为四五年经验的已经去问源码了,问项目了,也就不会来问这样的问题,那么这里不管你是刚入门的,还是工作了许久的,我都会来分享一下,我从网上摘录过来的大佬的一些理解。

1、什么是mvvm?

mvvm是一种设计思想,是Model-View-ViewModel的缩写,本质上是MVC的改进版,即模型-视图-视图模型。Model指的是后端传递的数据。View指的是所看到的页面。ViewModel是mvvm模式的核心,它是连接view和model的桥梁。它有两个方向:一是将Model转化成View,即将后端传递的数据转化成所看到的页面。实现的方式是:数据绑定。二是将View转化成Model,即将所看到的页面转化成后端的数据。实现的方式是:DOM 事件监听。这两个方向都实现的,我们称之为数据的双向绑定。

在MVVM的框架下视图和模型是不能直接通信的。它们通过ViewModel来通信,ViewModel通常要实现一个observer观察者,当数据发生变化,ViewModel能够监听到数据的这种变化,然后通知到对应的视图做自动更新,而当用户操作视图,ViewModel也能监听到视图的变化,然后通知数据做改动,这实际上就实现了数据的双向绑定。并且MVVM中的View 和 ViewModel可以互相通信。

2、什么是MVC?(因为上面有提到mvc,也是必须要了解的重要内容)

MVC全名是Model View Controller,MVC是Model-View- Controller的简写。即模型-视图-控制器。M和V指的意思和MVVM中的M和V意思一样。C即Controller指的是页面业务逻辑。使用MVC的目的就是将M和V的代码分离。‘MVC是单向通信。也就是View跟Model,必须通过Controller来承上启下。MVC和MVVM的区别并不是VM完全取代了C,ViewModel存在目的在于抽离Controller中展示的业务逻辑,而不是替代Controller,其它视图操作业务等还是应该放在Controller中实现。也就是说MVVM实现的是业务逻辑组件的重用。由于mvc出现的时间比较早,前端并不那么成熟,很多业务逻辑也是在后端实现,所以前端并没有真正意义上的MVC模式。而我们今天再次提起MVC,是因为大前端的来到,出现了MVVM模式的框架,我们需要了解一下MVVM这种设计模式是如何一步步演变过来的。 

3、为什么会有MVVM框架?

在过去的10年中,我们已经把很多传统的服务端代码放到了浏览器中,这样就产生了成千上万行的javascript代码,它们连接了各式各样的HTML 和CSS文件,但缺乏正规的组织形式,这也就是为什么越来越多的开发者使用javascript框架。比如:angular、react、vue。浏览器的兼容性问题已经不再是前端的阻碍。前端的项目越来越大,项目的可维护性和扩展性、安全性等成了主要问题。当年为了解决浏览器兼容性问题,出现了很多类库,其中最典型的就是jquery。但是这类库没有实现对业务逻辑的分成,所以维护性和扩展性极差。综上两方面原因,才有了MVVM模式一类框架的出现。比如vue,通过数据的双向绑定,极大了提高了开发效率。

4、MVVM的优点?

1.低耦合。视图(View)可以独立于Model变化和修改,一个Model可以绑定到不同的View上,当View变化的时候Model可以不变化,当Model变化的时候View也可以不变; 2.。可重用性你可以把一些视图逻辑放在一个Model里面,让很多View重用这段视图逻辑。 3.独立开发。开发人员可以专注于业务逻辑和数据的开发(ViewModel),设计人员可以专注于页面设计。 4.可测试。

可能你觉得我上面说的也不是深入理解的内容,甚至都是表面的,如果你想深入的话,网上很多大佬的文章都写的非常的详细,这里我推荐一位博主的链接,大家感兴趣想深入的话,可以去看看。https://www.cnblogs.com/wzfwaf/p/10553160.html

最后每日一首歌吧,今天给大家推荐一首金志文的《自娱自乐》,希望大家都能学着一个人,一整天都不失落,一个人也可以自娱自乐,过好每一天。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 简述MVVM
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档