1. 是什么

M:Model(数据模型):负责所有数据及其操作

V:View(视图):负责所有UI界面

C:Control(控制器):负责其他

前端的 MVC 是从后端的 MVC 借鉴而来的,根据前端的情况加入了改编,大致思想是不变的

2. 普通做法 vs MVC做法

普通做法:

首先通过JS获取页面的DOM元素,其次在JS中对DOM元素进行操作,然后再将DOM元素放回页面。

数据始终从页面流出,经过JS处理,再次流向页面

MVC做法:

数据始终从JS流出后渲染到页面

view = render(data)

3. EventBus

实现方式

检测数据,只要数据一改变就手动触发事件,自动 render 渲染视图,有两种方式实现

  1. 使用 vue2.0 的 Object.defineProperty
  2. 使用 eventBus,是一个jQuery的空对象,
    const eventBus = $({}),(或者是const eventBus = $(window))主要是用该jQuery对象里的on方法和trigger方法来监听事件和触发事件

主要API

on(eventName, fn)

trigger(eventName, data)

off(eventName, fn)

主要API是基于jQuery提供的这三个函数的功能实现的

4. 表驱动编程

表驱动编程简单来说就是用查表的方式获取值,在各种重复的操作之中抽取出不同的地方组成一个表,在表中查询取值。在 MVC 可以用于事件绑定的操作,事件绑定方法都是类似的,可以将事件名、事件对象、处理函数抽离出来组成一个哈希表,以对象的方式存储,如下所示:

  1. events:{
  2. 'click #add1': 'add',
  3. 'click #minus1': 'minus',
  4. 'click #mul2': 'mul2',
  5. 'click #divide2': 'divide2'
  6. }

然后遍历事件表,依次绑定事件。

5. 浅评MVC

优点

  1. 恒定复杂度
  2. 分层,结构清晰
  3. 耦合性低

缺点

  1. 多次渲染降低效率
  2. 不适合小型、中型项目

mvc 框架

backbone.js

https://backbonejs.org/

参考和推荐

MVC,MVP 和 MVVM 的图示 - 阮一峰的网络日志