浅析 MVC

180 阅读2分钟

1. MVC 的三个对象


M:model(模型),封装数据操作。

我们可以将对数据的增删改查操作封装到一起。

let Model={ 
  data(){数据源}, 
  create(){增加数据},
  delete(){删除数据}, 
  update(){修改数据},
  get(){获取数据} 
}

V:view(视图),视图渲染。

它描绘的是model的当前状态。

let View={
  html:'html代码'
  init(){初始化},
  render(){重新渲染页面}
}

C:controller(控制器), M 和 V 之外剩余的事情都可以交给 C 来做。

let Controller={
  init(){
    v.init() // 初始化View
    v.render() // 第一次渲染页面
    c.autoBindEvents() // 自动的事件绑定
    eventBus.on('m:update',()=>{v.render()} // 当enentsBus触发'm:update'时View刷新
  },
  events:{事件以哈希表的方式记录存储},
  method(){
    m.update()
  },
  autoBindEvents(){自动绑定事件}
}

2. 什么是 eventBus

eventBus 又称为事件总线,可以用来进行组件之间的监听和通信,所以我们可以通过 eventBus 来实现 M、V、C 间的通信。

eventBus 有三个常用的API:

  • eventBus.on()用于监听对象。
  • eventBus.trigger()用于触发对象。
  • eventBus.off()用于取消对象监听。 例如我们可以使用 eventBus 实现 M 的数据发生变化后 V 可以自动更新。
const eventBus = $(window) // 获取eventBus 对象
const m = {
  data: {
    ...
  },
  update(data) {
    eventBus.trigger('m:updated') // trigger 触发事件更新数据
  }
}

const v = {
  render(data) {
    ... // 更新数据
  }
}  
  
const c = {
  eventBus.on('m:updated', () => { // on 方法执行监听后触发 v 的视图更新
    v.render(m.data.n)
  })
}

3. 表驱动编程

表驱动编程就是把大批类似但不重复的代码中的重要数据抽取出来,组成 哈希表 ,利用表进行编程。

4. 我对模块化编程的理解

将一个复杂的系统按照逻辑分成若干个模块,每个模块完成一个特定的子功能,所有的模块按某种方法组装起来,成为一个整体,完成整个系统所要求的功能。

  • 各模块之间互不影响,结构清晰,减少重复代码。
  • 其他人不需要理解代码是如何实现的,只需要使用暴露出的接口来访问这个组件就可以。