浅析MVC

127 阅读2分钟

MVC的三个对象

MVC即Model, View, Controller的缩写,它是一种设计模式。 MVC认为程序可以被分为三个大的类。使用MVC的目的是将M和V的实现代码分离,从而使同一个程序可以使用不同的表现形式

  • Model Model中封装了与程序有关的数据及其方法
Model = {
    data: { //存储数据 },
    create: { //增 },
    delete: { //删 },
    update(data) { //改
       Object.assign(m.data, data) 
       eventBus.trigger('m:upate') // eventBus触发'm:update'信息, 通知View刷新 
    },
    get:{ //查 } 
}
  • View View是对数据的展示,展示的内容就是Model中的data
View = {
    el: //待渲染的元素
    html: `<div> ... <div> `
    init(){
        v.el: 
    },
    render(){ //渲染 }
}


  • Controller Controller用于控制数据的改变,对用户输入做出响应等
Controller = {
   init(){
      v.init() // View初始化
      v.render() // 渲染
      c.autoBindEvents() // 自动的事件绑定
      eventBus.on('m:update', () => { v.render() }) // 当eventBus触发'm:update'时View刷新
   },
   events:{ //事件以哈希表方式记录 },
   method() {
      data = //改变后的新数据
      m.update(data)
   },
   autoBindEvents() { //自动绑定事件 }
}EventBus

EventBus

  • 常用的API
  1. on --对事件添加监听
  2. trigger --用于触发事件
  3. off--取消监听
eventBus.on('xxx', () => { console.log('你被监听了!') }) //监听事件,听到后执行函数
eventBus.trigger('hello') // 触发事件
eventBus.off('xxx') //取消监听

表驱动编程

表驱动方法是一种使你可以在表中查找信息,而不必用重复多次的语句来把他们找出来的方法。事实上,任何信息都可以通过表来挑选。

function eatWhat(day) {
    if (day === '周一') {
        return '米饭'
    } else if (day === '周二') {
        return '面条'
    } else if (day === '周三') {
        return '大便'
    } else if (day === '周四') {   
        // 此处添加了一个新的名词翻译
        return '西北风'
    } else if (day==='周五'){
    	return '外卖'
    }
}

function eatWhat(day){
	let days={
    	'周一':'米饭''周二':'面条',
        '周三':'大便',
        '周四':'西北风',
        '周五':'外面',
        //直接在表里添加
    }
    if(day in days){
    	return days[day]
    }
    
}
  • 好处
  1. 提高了程序的可读性
  2. 减少了重复代码
  3. 更强的可扩展性

模块化的理解

  1. 模块化可以使得程序员专注于每个模块的内容
  2. 模块化可以降低代码耦合度
  3. 模块化使得程序更容易维护,哪里出错了就去哪个模块该BUG
  4. 模块化使得代码的可利用率变高
  5. 不同模块可以使用不同的技术,不用担心每个人技术不同