MVVM是Modl-Viw-ViwModl的缩写,它是一种基于前端开发的架构模式,其核心是提供对Viw和ViwModl的双向数据绑定,这使得ViwModl的状态改变可以自动传递给Viw,即所谓的数据双向绑定。
Vu.js是一个提供了MVVM风格的双向数据绑定的JavaScript库,专注于Viw层。它的核心是MVVM中的VM,也就是ViwModl。ViwModl负责连接Viw和Modl,保证视图和数据的一致性,这种轻量级的架构让前端开发更加高效、便捷。
?为什么会出现MVVM呢?
我接触MVVM是在年,可以说年是MVVM最火热的一年,而在这之前,我所知道的就是MVC,MVC大约是在5年前,也就是年的时候接触的,那时候刚学编程语言,学的Java,而Java中经典的SSH框架就用来构建一个标准的MVC框架。说实话,MVC用了这么多年,但始终没有很深刻的理解,只停留在用的层面,一直到接触Vu.js之后,研究了MVVM架构思想,然后再回头看MVC,才有一种豁然开朗的感觉~
MVC即Modl-Viw-Controllr的缩写,就是模型-视图-控制器,也就是说一个标准的Wb应用程式是由这三部分组成的:
Viw用来把数据以某种方式呈现给用户
Modl其实就是数据
Controllr接收并处理来自用户的请求,并将Modl返回给用户
在HTML5还未火起来的那些年,MVC作为Wb应用的最佳实践是OK的,这是因为Wb应用的Viw层相对来说比较简单,前端所需要的数据在后端基本上都可以处理好,Viw层主要是做一下展示,那时候提倡的是Controllr来处理复杂的业务逻辑,所以Viw层相对来说比较轻量,就是所谓的瘦客户端思想。
年到年,HTML5概念被热炒,受到追捧,年,W3C正式宣布HTML5规范已经正式定稿。年我刚进公司就接触了第一个HTML5框架Snchtouch,它是一款用来构建移动应用的HTML5框架,它将前后端彻底分离,前端采用MVC架构,作为一个独立的项目工程来维护。
为什么前端要工程化,要是使用MVC?
相对HTML4,HTML5最大的亮点是它为移动设备提供了一些非常有用的功能,使得HTML5具备了开发App的能力,HTML5开发App最大的好处就是跨平台、快速迭代和上线,节省人力成本和提高效率,因此很多企业开始对传统的App进行改造,逐渐用H5代替Nativ,到年的时候,市面上大多数App或多或少嵌入都了H5的页面。
既然要用H5来构建App,那Viw层所做的事,就不仅仅是简单的数据展示了,它不仅要管理复杂的数据状态,还要处理移动设备上各种操作行为等等。因此,前端也需要工程化,也需要一个类似于MVC的框架来管理这些复杂的逻辑,使开发更加高效。但这里的MVC又稍微发了点变化:
ViwUI布局,展示数据
Modl管理数据
Controllr响应用户操作,并将Modl更新到Viw上
这种MVC架构模式对于简单的应用来看起是OK的,也符合软件架构的分层思想。但实际上,随着H5的不断发展,人们更希望使用H5开发的应用能和Nativ媲美,或者接近于原生App的体验效果,于是前端应用的复杂程度已不同往日,今非昔比。这时前端开发就暴露出了三个痛点问题:
1.开发者在代码中大量调用相同的DOMAPI,处理繁琐,操作冗余,使得代码难以维护。
2.大量的DOM操作使页面渲染性能降低,加载速度变慢,影响用户体验。
3.当Modl频繁发生变化,开发者需要主动更新到Viw;当用户的操作导致Modl发生变化,开发者同样需要将变化的数据同步到Modl中,这样的工作不仅繁琐,而且很难维护复杂多变的数据状态。
其实,早期jqury的出现就是为了前端能更简洁的操作DOM而设计的,但它只解决了第一个问题,另外两个问题始终伴随着前端一直存在。
MVVM的出现,完美解决了以上三个问题。
MVVM由Modl,Viw,ViwModl三部分构成,Modl层代表数据模型,也可以在Modl中定义数据修改和操作的业务逻辑;Viw代表UI组件,它负责将数据模型转化成UI展现出来,ViwModl是一个同步Viw和Modl的对象。
在MVVM架构下,Viw和Modl之间并没有直接的联系,而是通过ViwModl进行交互,Modl和ViwModl之间的交互是双向的,因此Viw数据的变化会同步到Modl中,而Modl数据的变化也会立即反应到Viw上。
ViwModl通过双向数据绑定把Viw层和Modl层连接了起来,而Viw和Modl之间的同步工作完全是自动的,无需人为干涉,因此开发者只需白癜风能完全治愈吗白癜风早期能根治吗