美文网首页
什么是MVC、MVVM以及Vue底层实现相关总结

什么是MVC、MVVM以及Vue底层实现相关总结

作者: Allan要做活神仙 | 来源:发表于2019-02-20 15:03 被阅读3次

问到这个问题基本可以深入聊到vue的底层了,然后又可以拓展到其他框架react和angular。我认为这是面试中还算可以的一个切入点!

vue底层知识:

new mvvm()开始
一方面Observer设置data中的属性转为getter/setter实现数据监听(关键点1)
另一方面指令编译器Compile对元素节点指令进行解析,初始化视图

同时订阅Watcher用于更新视图,此时Watcher会将自己添加到消息订阅器Dep(关键点2)

当数据变化,Observer中的setter被触发,调用Dep.notify()Dep开始遍历所有订阅者Watcher,并调用订阅者的updata方法更新视图

Object.defineProperty可以知道(劫持)数据变化,那么:
1、如何在变化后去发布通知给订阅者(watcher)呢?
维护一个数组,用来收集订阅者,数据变动触发notify,再调用订阅者的update方法。
2、怎么去添加订阅者到订阅器(dep)?
Observergetter中去添加,如下:

// Observer.js
// ...省略
Object.defineProperty(data, key, {
    get: function() {
        // 由于需要在闭包内添加watcher,所以通过Dep定义一个全局target属性,暂存watcher, 添加完移除
        Dep.target && dep.addDep(Dep.target);
        return val;
    }
    // ... 省略
});

// Watcher.js
Watcher.prototype = {
    get: function(key) {
        Dep.target = this;
        this.value = data[key]; // 这里会触发属性的getter,从而添加订阅者
        Dep.target = null;
    }
}

ps:
1、proxy:vue初始化有proxy,作用是遍历data中的属性,将其代理到vm。实现修改vm.aaa就是修改vm.data.aaa
2、compile用于遍历解析模版指令会多次操作dom节点,使用fragment来提高性能和效率。

关键词:ObserverCompileWatcher(桥梁)New Mvvm()

参考来源:
https://github.com/DMQ/mvvm
http://baijiahao.baidu.com/s?id=1596277899370862119&wfr=spider&for=pc

MVVM

Model-View-ViewModel的简写。即模型-视图-视图模型。
【模型】指的是后端传递的数据。
【视图】指的是所看到的页面。
【视图模型】连接viewmodel的桥梁,是mvvm模式的核心。

MVVM的核心是ViewModel

它有两个方向:
一是将【模型】转化成【视图】,即将后端传递的数据转化成所看到的页面。
实现的方式是:数据绑定。

二是将【视图】转化成【模型】,即将所看到的页面转化成后端的数据。
实现的方式是:DOM 事件监听。

MVC

MVC的定义:MVCModel-View-Controller的简写。即模型-视图-控制器。
【模型】指的是后端传递的数据。
【视图】指的是所看到的页面。
【控制器】指的是页面业务逻辑。

使用MVC的目的就是将MV的代码分离。

MVC是单向通信。也就是ViewModel,必须通过Controller来承上启下。

MVCMVVM的区别并不是VM完全取代了CViewModel存在目的在于抽离Controller中展示的业务逻辑,而不是替代Controller,其它视图操作业务等还是应该放在Controller中实现。

也就是说MVVM现的是业务逻辑组件的重用。

由于MVC出现的时间比较早,前端并不那么成熟,很多业务逻辑也是在后端实现,所以前端并没有真正意义上的MVC模式。

相关文章

  • 什么是MVC、MVVM以及Vue底层实现相关总结

    问到这个问题基本可以深入聊到vue的底层了,然后又可以拓展到其他框架react和angular。我认为这是面试中还...

  • vue面试题

    MVVM、MVC的理解 VUE相对jquery有什么优点,谈谈你对虚拟dom的理解 有没有对vue底层实现原理有研...

  • vue的mvvm原理解析及手写一个

    # 手写vue的mvvm实现原理 ## 1:mvc和mvvm的区别? MVC:modal-view-control...

  • 2019-10-31

    手写vue的mvvm实现原理 1:mvc和mvvm的区别? MVC:modal-view-controller,比...

  • Vue2.0原理与MVVM的实现

    剖析Vue原理&实现双向绑定MVVM vue源码 双向绑定 -- MVVM 目前几种主流的MVC框架都实现了单向数...

  • 初识Vue

    1. MVVM模式 Vue采用MVVM(Model-View-ViewModel)模式实现,MVVM模式由MVC演...

  • Angular2双向绑定及变化检测

    前几天总结了MVC、MVP、MVVM设计模式,其中MVVM的核心机制就是双向绑定。React、Vue、Angula...

  • mvc和mvvm的区别

    前言 mvc和mvvm大概是个老生常谈的问题了,关于MVC和MVVM如此这般设计的原因以及我们应该如何思考一些相关...

  • Vue.Js

    Module Four - Vue 「About Base」 MVVM的理解?与MVC有什么不同? 1.MVC指的...

  • vue

    一.Vue基础 MVVM框架 MVVM是Model-View-ViewModel的缩写。MVVM借鉴了MVC的思想...

网友评论

      本文标题:什么是MVC、MVVM以及Vue底层实现相关总结

      本文链接:https://www.haomeiwen.com/subject/pcjhyqtx.html