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 渲染视图,有两种方式实现
- 使用 vue2.0 的
Object.defineProperty
- 使用
eventBus
,是一个jQuery的空对象,const eventBus = $({})
,(或者是const eventBus = $(window)
)主要是用该jQuery对象里的on
方法和trigger
方法来监听事件和触发事件
主要API
on(eventName, fn)
trigger(eventName, data)
off(eventName, fn)
主要API是基于jQuery提供的这三个函数的功能实现的
4. 表驱动编程
表驱动编程简单来说就是用查表的方式获取值,在各种重复的操作之中抽取出不同的地方组成一个表,在表中查询取值。在 MVC 可以用于事件绑定的操作,事件绑定方法都是类似的,可以将事件名、事件对象、处理函数抽离出来组成一个哈希表,以对象的方式存储,如下所示:
events:{
'click #add1': 'add',
'click #minus1': 'minus',
'click #mul2': 'mul2',
'click #divide2': 'divide2'
}
然后遍历事件表,依次绑定事件。
5. 浅评MVC
优点
- 恒定复杂度
- 分层,结构清晰
- 耦合性低
缺点
- 多次渲染降低效率
- 不适合小型、中型项目