浅析 MVC

95 阅读2分钟

MVC


MVC是一种架构设计模式,将一个应用程序分为了三个部分:视图层,数据层和控制层。通过对应用程序分层,可以将应用的各个模块之间解耦,使得各个模块的逻辑更加清晰,更符合最小知识原则。
  • M-Model(数据模型)负责操作所有数据,用于保存和处理页面中展示的数据,在数据发生变化时,同时视图层重新渲染视图。
  • V-View(视图)负责所有UI界面,定义了页面的UI布局,同时处理当数据变化时,UI如何渲染的问题。
  • C-Controller(控制器)负责其他,用于处理用户与视图交互,用户对数据的改变等逻辑。
// 示例
const m = {
    data:{数据源},
    create(){增加数据},
    delete(){删除数据},
    update() {改}
    get() {查}
}

const v = {
    el:要刷新的元素,
    html:`要显示在页面上的内容`,
    init(){
        v.el:需要刷新的元素
    },
    render(){
        刷新页面
    }
}

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

EventBus


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

EventBus API


  • EventBus.on() 监听事件:当'event'触发时,执行内容
  • EventBus.trigger() 触发事件:当一个事件执行,EventBus触发
  • EventBus.off() 解绑事件:当事件存在时,其余参数完全匹配

//  触发事件:注意事件名不能有空格
eventBus.trigger('m:update')  
//监听事件
 eventBus.on('m:update',()=>{ // 名字不能有空格
            v.render(m.data.n)
            localStorage.setItem('x', m.data.n)
        })

表驱动编程


表驱动法是一种编程模式(scheme)——从表里面查找信息而不使用逻辑语句(if和case)
表驱动编程是一种很重要的编程思想,它的理念是从大量相似的代码中抽取出本质的东西,组成哈希表,利用表进行编程,以减少重复代码。
//示例
//假设day的起始值为1,那么以下代码则是输出某天是星期几

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

可以优化为:

function week(days){
	let weekdays=['星期天','星期一','星期二','星期三','星期四','星期五','星期六'];
  return weekdays[days%7];
}

对于模块化的理解


将一个复杂的程序根据一定的规则,封装成几个模块进行组合。
其内部的数据实现是私有的,只对外提供接口进行通信。
模块化可以降低代码耦合度,减少重复代码,提高代码重用性,并且在项目结构上更加清晰,便于维护。