Skip to content

MVC(Model-View-Controller)

  • M -Model 数据模型 负责所有所数据
  • V -View 视图 负责所有的UI界面
  • C -Controller 负责UI界面和数据的交互 用伪代码解释如下

1.Model

用于封装与应用程序的业务逻辑相关的数据以及对数据的处理方法。

Model = {
    data: { 需要用到的数据 },
    create(): { 增 },
    delete(): { 删 },
    update() { 改 },
    get():{ 查 }
}

2.View

能够实现数据有目的的显示。

View = {
    el:null,
    html: `......` //视图模板
    init(){ 初始化页面 },
    render(){ 渲染页面 }
}

3.Controller

用于控制应用程序的流程。它处理事件并作出响应。“事件”包括用户的行为和数据 Model 上的改变。

Controller = {
   init(){
      v.init() // 初始化
      v.render() // 第一次渲染
      c.autoBindEvents() // 自动的事件绑定
      eventBus.on('m:update', () => { v.render() })
      // 当eventBus触发'm:update',页面重新渲染
   },
   events:{ 事件以哈希表方式记录 },
   method() {
      data = 改变后的新数据
      m.update(data)
   },
   autoBindEvents() { 自动绑定事件 }

优点

  • 低耦合性
  • 高重用性和可适用性
  • 较低的生命周期成本
  • 快速部署
  • 可维护性
  • 软件工程化管理

缺点

  • 增加了系统结构和实现的复杂性
  • 视图与控制器间的过于紧密的连接
  • 视图对模型数据的低效率访问

EventBus

EventBus又称为事件总线,可以用来进行组件之间的监听和通信。

比如当Model模块中的数据发生更新,触发了EventBus上的某个事件,而Controller模块恰好在监听这个事件,当这个事件触发时,Controller模块就知道Model模块中的数据发生了更新了,从而做出一些反应。

EventBus的API

  • EventBus.on() 监听事件:当什么触发时,执行一些内容
  • EventBus.trigger() 触发事件:当一个事件执行,EventBus触发
  • EventBus.off() 解绑事件:当事件存在时,其余参数完全匹配时间处理函数移除
eventBus.trigger('event') //触发事件
eventBus.on('event',()=>{ //监听事件
     do something()
 })

表驱动编程

表驱动法是一种编程模式(scheme)——从表里面查找信息而不使用逻辑语句(if和case)。事实上,凡是能通过逻辑语句来选择的事物,都可以通过查表来选择。

在JS中,表就是指的 哈希表 结构,使用表驱动编程,能使重复冗余的代码变的稳定简洁。

举例输入数字0~6得到想要的星期几

function weekday(day) {
    if(day===0){
  	  return '星期天';
    }
    else if(day===2){
  	  return '星期二';
    }
    else if(day===3){
  	  return '星期三';
    }
    else if(day===4){
  	  return '星期四';
    }
    else if(day===5){
  	  return '星期五';
    }
    else if(day===6){
  	  return '星期六';
    }
}

上面的代码就显的重复和冗余,但可以通过将数据存到表里来实现如下所示。

weekday = {
    '0':'星期天',
    '1':'星期一',
    '2':'星期二',
    '3':'星期三',
    '4':'星期四',
    '5':'星期五',
    '6':'星期六'
}
function week(data) {
    return weekday[data]
}

模块化

将一个复杂的程序依据一定的设计规范封装成几个块(文件)并进行组合。但模块的内部数据的实现是私有的,可以通过向外部暴露一些接口与外部其他模块进行通信。

模块化可以降低代码耦合度,减少重复代码,提高代码重用性,并且在项目结构上更加清晰,便于维护。