《浅析MVC》

210 阅读2分钟

一. MVC

MVC的三个对象:

  • m : model 数据模型,负责操作数据
  • v : view 视图,负责操作UI界面
  • c : controller 负责其他部分

MVC是万金油,也就是说所有页面都可以用m+v+c三个对象来呈现

//m用于保存数据,操作数据
const m={
    data:{n:1},
    update(){}
}
//v负责渲染页面相关
const v={
    el:null,  //容器
    html:``,  //html代码
    render(data){}
}
//c负责其他部分,如初始化,获取元素,绑定事件等
const c={
    init(){}
    autoBindEvents(){}
    event:{}
}

然后发现对象v和c的联系很紧密,所以把v和c合并,当成一个对象。引入类,把共有属性放到原型上,通过类创建对象。

二. EventBus

为了实现对象之间的通信,我们引入eventBus:const eventBus=$(window),由于每个模块每个对象都需要它,所以引入EventBus类。是为了使用它的两个方法:on,trigger.

  • eventBus.on('update',()=>{})用于监听一个事件
  • eventBus.trigger('update')用于触发事件

在这里引入继承,让Model,View继承EventBus类,这样对象m和v就可以直接使用EventBus类上的方法了。

三. 表驱动编程

当有许多逻辑相同,但是数据不重复的代码时,比如多个if else语句,就可以改写成表驱动。把不同的数据做成哈希表,通过遍历哈希表完成逻辑,不需要多次重复的操作。比如为多个按钮绑定事件,逻辑都是相同的,通过on方法,监听某个事件,当事件触发时,调用某个事件处理函数。使用表驱动,就可以把每个监听事件不同的部分放在表里,只需要遍历一次表,就可以给所有按钮绑定事件。

四. 模块化

我认为模块化把一个程序的结构变得很清晰。

没有接触过模块化的概念之前,写一个模块就是平铺直叙的分别写html,css,js。但是利用模块化的思想,我们引入一个模块可以只引入js,至于html和css都交给它的js去引入。当有很多个模块时,整个代码的结构就很清晰,从外边看就是引入每个模块的js就可以了,不需要关心每个模块内部的情况。