《浅析MVC》

119 阅读2分钟

1. MVC 三个对象

MVC全称Model View Controller,即模型(model)-视图(view)-控制器(controller)。

  • Model: 模型持有所有的数据、状态和程序逻辑.
  • View: 负责界面的布局和显示.
  • Controller: 负责模型和界面之间的交互.

伪代码:

const m = {
    data: x // 里面是一些需要更新和改变的数据
}
const v = { 
    el: el, // el 相当于一个容器,来放置动态渲染的 html 
    html: `<div>我是需要渲染的{{x}}</div>`, //m 里的数据
    render(v.el){ 
        // 这里让 m.data.x 替换成 html 的 {{x}}
    } 然后加到 v.el 中
}
const c = { 
    events: { 
        "click #add": "add",
        "click #reduce": "reduce" 
    }, 
    add(){
        m.data.x += 1 
        v.render()
    }, 
    reduce(){
        m.data.x -= 1
        v.render() },
    autoEventSBind: {
        for(let key in events) // 读取event的结构,然后用 foreach 给每个函数添加事件,再调用 c.add 和 c.reduce,重新再用 v.render() 渲染出来
    } 
}

2. EventBus

eventBus是一个对象,它可以用来完成上述M、V、C对象间的通信。

例如,我们希望当M中的数据变化时,能够自动触发V的render,使变化后的数据即时渲染到界面上。

const eventBus = $(window) // $ 为 jquery 
const m = { 
    data: x 
    update(){
        eventBus.trigger('m:changed')
    } 
} 
// v 假装写好了
cosnt c = { 
    add(){ 
        m.data.x += 1 
        eventBus.on('m:changed', (){ 
            c.render() 
        })
    } 
}

API :

  1. trigger 触发函数
  2. on 监听函数
  3. off 停止监听

3. 表驱动编程

JS中,表就是指的哈希表结构,使用表驱动编程,能使重复冗余的代码变的稳定简洁,简单讲是指用查表的方法获取值。表里可以存数据,也可以存指令,或函数等都可以。从大量相似的代码中抽取出本质的东西,组成哈希表,利用表进行编程,以减少重复代码。

if-else:

function translate(term) { 
    if (term === '1') {
        return '一' 
    } else if (term === '2') { 
        return '二' 
    } else if (term === '3') { 
        return '三' 
        
        ......  //省略n个
        
    } else { 
    return '???' 
    } 
}

表驱动:

function translate(term) {
    let terms = { 
        '1': '一', 
        '2': '二', 
        '3': '三',
        ......
        }
    return terms[term]
}

4. 模块化

模块化就是把一个文件看成一个模块。每个模块有自己的命名空间.

在 MVC 的概念里模块化遵循最小知识原则。
就是把每个不相同的功能分成不同模块,互不依赖,互补影响,有利于维护和读写。

以前,实现一个应用需要引入html、css、js。
有了模块化的思想,只需引入一个js就可以实现。
在main.js中引入各个模块的js,各个js再各自引用自己的css、创建自己的html