Vue进阶 | 说说双向绑定的原理及常见架构模型

271 阅读2分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第17天,点击查看活动详情

本系列旨在对Vue进行查漏补缺,理解原理

提到vue的双向绑定,就需要了解相应的架构模型(MVVM)

1、来说说vue的双向绑定?

Vue、AngularJS都是 MVVM 架构,视图 UI 和业务逻辑是分开的,其中VM(ViewModel)的核心功就是数据的双向绑定

双向数据绑定:
    将Model转化成View,即将数据转化成所看到的页面。实现的方式是:数据绑定。
    将View转化成Model,即将页面转化成数据。实现的方式是:DOM 事件监听。

原理:

采用数据劫持结合发布者-订阅者模式的方式,通过Object.defineProperty()来劫持各个属性的 settergetter,在数据变动时发布消息给订阅者,触发相应的监听回调。

image.png

2、MVC、 MVP、 MVVM 的区别?

MVC、MVP 和 MVVM 是三种常见的软件架构设计模式,主要通过分离关注点的方式来组织代码结构,优化开发效率。

1. MVVM 是 MVC 的改进版:

-   数据层(Model):数据及业务逻辑
-   视图层(View):展示效果,各类UI组件
-   业务逻辑层(ViewModel):核心,负责监听 Model 中数据的改变并且控制视图的更新,处理用户交互操作(Model和View无直接关联)

image.png

2. MVC

Model、View 、Controller

- Controller是桥梁,它从视图读取数据,控制用户输入,并向发送数据。    
- View 接收到用户的交互请求之后,会将请求转发给 Controller,Controller 解析用户的请求之后,数据发送对应的 Model。
- View 层和 Model 层耦合在一起,当项目逻辑变复杂的时候,可能会对代码的复用性造成一些问题

image.png

3. MVP

Model、View 、Presenter(代理)

image.png

  • MVP所有的交互都发⽣在Presenter内部,通过使用 Presenter 来实现对 View 层和 Model 层的解耦。(MVC中View会直接从Model中读取数据,⽽不是通过 Controller)

  • View 层和 Model 层无直接关联,View 不依赖 Model

  • React采用了单向数据流