浅析 MVC

163 阅读2分钟

MVC

概念

MVC是一种架构设计模式,它通过关注点分离鼓励改进应用程序组织。在过去,MVC被大量用于构建桌面和服务器端应用程序,如今Web应用程序的开发已经越来越向传统应用软件开发靠拢,Web和应用之间的界限也进一步模糊。传统编程语言中的设计模式也在慢慢地融入Web前端开发。由于前端开发的环境特性,在经典MVC模式上也引申出了诸多MV*模式,被实现到各个Javascript框架中都有多少的衍变。

MVC三个对象

M(model)

  • 就是用来处理数据的

V(view)

  • 就是用来渲染页面的

C(controller)

  • 就来干一些杂七杂八的活儿的,比如收发请求,数据验证

代码实例

const m = {
    data: {},
    create() {增 },
    delete() { 删},
    update() {改},
    get() {查}
}

const v = {
    el: null,
    // 初始化html
    html: `代码`
    ,
    init(container) {
        v.el = $(container)
    },
    render(n) { }
}

const c = {
    init(container) {})
    }, 
    events: { 事件}, 
    add() {详细执行},
    minus() {详细执行},
    mul() {详细执行},
    div() {详细执行},
    autoBindEvents() {逻辑}
    }
}

EventBus

当一个事件执行,eventBus 触发 m:updated eventBus.trigger('m:updated')

eventBus 监听 m:updated,当 m:updated 触发时,执行一些内容

eventBus.on('m:updated',()=>{
     v.render(m.data.n)
 })

表驱动编程

  • 表驱动方法编程(Table-Driven Methods)是一种编程模式,适用场景:消除代码中频繁的if else或switch case的逻辑结构代码,使代码更加直白.
  • 代码
c = {
     events:{
         'click #add1':'add',
         'click #minus1':'minus',
         'click #mul2':'mul',
         'click #divide2':'div'
     },
     autoBindEvents(){
         for(let key in c.events){
             const value = c[c.events[key]]
             const spaceIndex = key.indexOf(' ')
             const part1 = key.slice(0, spaceIndex)
             const part2 = key.slice(spaceIndex + 1)
             v.el.on(part1,part2,value)
         }
     }
 }

我是如何理解模块化的

  • 模块化就是把各个技能之间尽可能的细分,弱化功能之间的联系,降低他们的耦合度,提高程序的拓展性,可以把现在签后端分离也看成是一种模块化,前端不管后端是啥实现,我要的数据你给我就行,后端不管前端是怎么渲染,我要的参数你给我就行。两者没有特别紧密的联系,但开发效率和程序稳定性,拓展性都会比耦合度高的项目要好(学java的时候还在jsp里面写过java代码 汗 = =)。