浅析mvc

97 阅读2分钟

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. 模块化

模块是指分属同一功能/业务的代码进行隔离(分装)成独立的模块,可以独立运行,独立管理,每个模块有很多接口,可供调用。 我理解的模块化就是为了让代码独立运行,方便管理,也方便相同代码的共用,减少冗余的代码

同样的代码写三遍,就应该抽成一个函数

同样的属性写三遍,就应该做成共用属性(原型或类)

同样的原型写三遍,就应该做成继承