一. 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就可以了,不需要关心每个模块内部的情况。