1. MVC是什么?
MVC模式(Model–view–controller)是软件工程中的一种软件架构模式,把软件系统分为三个基本部分:模型(Model)、视图(View)和控制器(Controller)。
2. MVC 三个对象分别做什么
- M-model(数据模型)负责操作所有的数据
- V-view(视图)负责所有UI界面
- C-controller(控制器)负责其他
//数据相关的,都放到m
const m = {
data: {
//所有数据字段
},
create() {增加数据},
delete() {删除数据},
update(data) {修改数据},
get() {获取数据},
};
//视图相关的都放到v
const v = {
el: 元素,
html: `html代码`,
init(container) {
初始化
},
render(n) {
渲染页面
},
};
//其他都c
const c = {
init(container) {
初始化
},
events: {
事件元素
},
add() {
实现方法
},
autoBindEvents() {
自动绑定事件实现
}
}
3. EventBus 是什么?有什么用?
eventBus 主要用于对象间通信。还提供了 on、off 和 trigger 等 API,on 用于监听事件,trigger 用于触发事件。使用 eventBus 可以满足最小知识原则,m 和 v 互相不知道对方的细节,但是却可以调用对方的功能。
如下示例:我们可以在M的data发生变动时,用trigger方法触发一个事件A(m-updated),然后,用on方法监听这个事件A,一旦事件A触发(即数据变化了),就调用V的render重新渲染视图,就实现了M和V之间的沟通,使得视图和数据保持同步。
const eventBus = $({});
const m = {
data: {
number: parseInt(localStorage.getItem("number")) || 100,
},
update(data) {
Object.assign(m.data, data);
eventBus.trigger("m-updated");
localStorage.setItem("number", m.data.number);
},
};
const c = {
init(container) {
eventBus.on("m-updated", () => {
v.render(m.data.number);
});
}
};
4. 模块化
模块是指分属同一功能/业务的代码进行隔离(分装)成独立的模块,可以独立运行,独立管理,每个模块有很多接口,可供调用。 我理解的模块化就是为了让代码独立运行,方便管理,也方便相同代码的共用,减少冗余的代码
同样的代码写三遍,就应该抽成一个函数
同样的属性写三遍,就应该做成共用属性(原型或类)
同样的原型写三遍,就应该做成继承