MVX

MVC框架最早出现在Java领域,逐渐在前端开发领域也被应用,相续出现了MVP,以及现在最成熟的MVVM。

MVC

MVC是应用最广泛的软件架构之一,分为Model(模型)、Controller(控制器)、View(视图)。基于分层的目的让彼此的职责分开。

  • View通过Controller来和Model建立联系
  • Controller是Model和View的协调者
  • View和Model不直接联系,基本联系都是单向的。
MVC通信方式

用户操作应该放在什么位置呢,MVC之间又有什么变化呢?

用户通过Controller来操作Model以达到View的变化。

MVC通信方式

MVP

MVP 是从经典的MVC模式演变而来的,基本思想有相通之处:

  • Controller/Presenter负责逻辑的处理
  • Model 提供数据
  • View 负责显示

在MVP中,Presenter完全把View和Model进行分离,主要的程序逻辑在Presenter里实现。

Presenter与具体的View是没有直接关联的,而是通过定义好的接口进行交互,从而使得在变更View时保持Presenter不变。

MVP通信方式

MVVM

MVVM代表框架有:知名度相对偏低的Knockout、早期的Ember.js,Google的AngularJS、Vue.js等。

MVVM只是把MVC的Controller和MVP的Presenter改成了ViewModel。View的变化会自动更新到ViewModel,ViewModel的变化也会自动同步到View上。

这种自动同步是因为ViewModel中的属性实现了Observer,当属性变更时都能触发对应的操作。

MVVM用户操作影响

Vue.js是什么

Vue.js不是一个框架, 它只聚焦View,是一个构建数据驱动的Web界面的库。

Vue.js通过简单的API提供高效的数据绑定和灵活的组件系统。

Vue.js

Vue.js特性

  • 轻量
    除了以MVP模式代表的Riot.js外,Vue.js算是前端库里体积非常小的,但不依赖其他基础库。
  • 数据绑定
    对于富交互、状态机类似的前端UI界面,数据绑定非常简单、方便。
  • 指令
    类似AngularJS拥有内置的简单指令,也可自定义指令,通过对应表达式值的变化即可修改对应的DOM。
  • 插件化
    Vue.js核心库不包括Router、AJAX、表单验证等功能,可方便地加载对应的插件。

Vue.js与其他框架的区别

与AngularJS的区别

AngularJS应用于PC端的复杂交互系统

相同点

  • 支持指令 内置指令和自定义指令
  • 支持过滤器 内置过滤器和自定义过滤器
  • 支持双向绑定
  • 不支持低端浏览器(IE6/7/8)

Vue.js使用比如Array.isArray的ES5特性,AngularJS1.3开始不支持IE8。

不同点

  • AngularJS学习成本高,增加Dependency Injection特性,而Vue.js本身提供的API简单直观。
  • 性能上AngularJS依赖对数据做脏检查,Watcher越多越慢。Vue.js使用基于依赖追踪的观察并使用异步队列更新,所有的数据都是独立触发的。对于庞大的应用来说,优化差异比较明显。

与React的区别

Facebook的React目前受关注度很高

相同点

  • React采用特殊的JSX语法,Vue.js在组件开发中推崇编写.vue特殊文件格式,对文件内容约定,两者都需编译后使用。
  • 开发思想相同:一切都是组件,组件实例之间可嵌套
  • 提供合理的钩子函数,让开发定制化地去处理请求。
  • 无内置AJAX、Router等功能到核心包,以插件方式加载。
  • 组件开发中都支持mixins特性

不同点

  • React依赖Virtual DOM,而Vue.js使用DOM模板。
  • React采用Virtual DOM会对渲染出来的结果做脏检查。
  • Vue.js在模板中提供指令、过滤器等,可方便快捷地操作DOM。

与Knockout的区别

Knockout非常轻量级,是兼容IE6+的MVVM框架。

相同点

  • 数据和DOM元素绑定
  • DOM元素基于模板
  • 追求UI和数据关联自动刷新
  • 支持依赖追踪

不同点

  • Knockout所有可观测属性需手动用observable()来初始化,需要用函数调用方式来操作数据。
  • Knockout没有ViewModel之间作用域的继承

与Reactive.js的区别

Reactive.js和Vue.js的API类似,通过实例化Reactive类传入元素和数据、模板等,它使用字符串模板,数据模板和Knockout一样用get和set,代码体积较大。

与Polymer的区别

2013年Google I/O之后推出的Polymer,提出Web Component早期规范性方案,如HTML Imports、Shadow DOM、数据绑定等。不过由于后续新版本对之前冲击较大,一度受到早期开发者的抱怨。

相同点

  • 支持数据绑定
  • 与Vue.js推崇的组件文件都是以.vue后缀组织结构类似

不同点

  • Polymer推崇Web Component标准化,依赖浏览器环境的特性支持。若不支持则要加载对应的Polyfill。
  • Polymer代码体积较大无法做到轻量级

与Backbone.js区别

定位不同,Vue.js专注于View,Backbone除了View之外,还提供Collection、Model、Router。Vue.js拥有数据绑定,而Backbone需手动通过事件来操作DOM。

与Riot的区别

作为React-like的MVP框架的代表,Riot不到10KB稳居第一,超越第二的Vue.js。

相同点

  • API设计简单而专注学习成本低
  • 提供自定义生命周期钩子开发者灵活使用
  • 与主流工具集成度高支持与各种预编译工具集成
  • 组件化思想,将HTML和JS、CSS混在一个组件中。
  • 仅更新变化的元素

不同点

  • Riot内置路由功能设计支持Virtual DOM
  • Riot支持自定义标签,将标签内容放置在.tag文件中,使用script特殊的type="riot/tag"加载编译。
  • 与Polymer初衷一样,推崇Web Component标准化,不依赖冗余的Polyfill。
  • Riot支持服务端渲染
  • Riot默认单向绑定
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,686评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,668评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 158,160评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,736评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,847评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,043评论 1 291
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,129评论 3 410
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,872评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,318评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,645评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,777评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,470评论 4 333
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,126评论 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,861评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,095评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,589评论 2 362
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,687评论 2 351

推荐阅读更多精彩内容

  • 一,vue是什么? Vue.js(读音 /vjuː/, 类似于view) 是一套构建用户界面的渐进式框架。与其他重...
    不成才的IT狗阅读 3,143评论 0 31
  • 一,vue是什么? Vue.js(读音 /vjuː/, 类似于view) 是一套构建用户界面的渐进式框架。与其他重...
    米塔塔阅读 820评论 2 15
  • “腹有诗书气自华”比喻只要饱读诗书,学有所成,气质才华自然横溢,高雅光彩。没错,然而在这个“看脸”的时代,没有人会...
    饼姑娘阅读 353评论 3 3
  • 七月十二,天阴,才点的灯笼光有些晃,想是有雨。 酒剩下最后一缸,再要喝,便要等八月中桂花开再酿了。这缸酒从六月中留...
    葭杺兔阅读 449评论 0 0
  • MidnightSun2017阅读 116评论 0 0