美文网首页
MVVM框架的实现原理和mvc有什么区别

MVVM框架的实现原理和mvc有什么区别

作者: 猿分让我们相遇 | 来源:发表于2017-09-17 15:50 被阅读0次

    1. MVVM定义

    MVVM是Model-View-ViewModel的简写。即模型-视图-视图模型。
    【模型】指的是后端传递的数据/js数据。
    【视图】指的是所看到的页面。
    【视图模型】指的是vue的实例化对象,mvvm模式的核心,它是连接view和model的桥梁。它有两个方向:
    一是将【模型】转化成【视图】,即将后端传递的数据转化成所看到的页面。实现的方式是: 数据绑定
    二是将【视图】转化成【模型】,即将所看到的页面转化成后端的数据。实现的方式是:DOM 事件监听
    这两个方向都实现的,我们称之为数据的双向绑定。

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


    u=32561255,2826043542&fm=173&app=25&f=JPEG.jpg

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

    vue是通过数据劫持的方式来做数据绑定的,其中最核心的方法便是通过Object.defineProperty()来实现对属性的劫持,达到监听数据变动的目的,无疑这个方法是本文中最重要、最基础的内容之一,整理了一下,要实现mvvm的双向绑定,就必须要实现以下几点:
    1、实现一个数据监听器Observer,能够对数据对象的所有属性进行监听,如有变动可拿到最新值并通知订阅者
    2、实现一个指令解析器Compile,对每个元素节点的指令进行扫描和解析,根据指令模板替换数据,以及绑定相应的更新函数
    3、实现一个Watcher,作为连接Observer和Compile的桥梁,能够订阅并收到每个属性变动的通知,执行指令绑定的相应回调函数,从而更新视图
    4、mvvm入口函数,整合以上三者


    执行流程.jpg

    MVC的定义

    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这种设计模式是如何一步步演变过来的。

    相关文章

      网友评论

          本文标题:MVVM框架的实现原理和mvc有什么区别

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