每日一面试题之Day1

2021-10-13 18:07:55 浏览数 (1)

简述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

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

0 人点赞