初识MVC

207 阅读2分钟

一,MVC 三个对象分别做什么,以及伪代码示例:

MVC是一种设计模式,是一个万金油,用来优化所有代码结构。

1、M-Model(数据模型)负责操作所有数据

      var model = {
          data: null,
          init(){}
          fetch(){}
          save(){}
          update(){}
          delete(){}
          
      }

2、V-View(视图)负责所有UI界面

      view = {
            init(){}
            template: '<h1>h1</h1>'
          
      }

3、C-Controller(控制器)负责其他

      controller = {
          view: null,
          model: null,
          init(view, model){
              this.view = view
              this.model = model
              this.bindEvents()
      }
      render(){
              this.view.querySelector('name').innerText = this.model.data.name),
              bindEvents(){}
      }

二,EventBus 有哪些 API,是做什么用的,以及伪代码示例:

  EventBus 基本的 API 有 on (监听事件), trigger (触发事件), off (取消监听)方法。

  用于模块间的通讯, view 组件层面,父子组件、兄弟组件通信都可以使 eventbus 处理
   //EventBus.j代码
    class EventBus{
        constructor(){
           this._eventBus =$(window)
    }
        on(eventName, fn){
        return this._eventBus.on(eventName,fn)
    }
        trigger(eventName,data){
        return this._trigger.tiggger(eventName,data)
    }
        off(eventName, fn){
        return this._eventBus.off(eventName,fn)
    }
}
    export default EventBus


//new.js代码
    import EventBus from 'EventBus.js'
    const e =new EventBus()
      e.on()
      e.trigger()
      e.off()

三,表驱动编程是做什么的?

表驱动法是一种编程模式,从表(哈希表)里面查找信息而不是使用逻辑语句(if…else…switch,可以减少重复代码,只将重要的信息放在表里,
然后利用表来编程,与逻辑语句相比较有着更稳定的复杂度。
    bindEvents(){
         v.el.on('click','#add1',()=>{
         m.data.n +=1
         v.render(m.data.n)
    })
        v.el.on('click','#minus1',()=>{
        m.data.n-=1
        v.render(m.data.n)
    })
        v.el.on('click','#mul2',()=>{
        m.data.n*=2
        v.render(m.data.n)
    })
        v.el.on('click','#divide2',()=>{
        m.data.n/=2
        v.render(m.data.n)
    })
}
上面这段代码相似性很高,我们使用表驱动将事件取出一个哈希表,使逻辑和数据清晰明了的分开后的代码:
   events:{
         'click #aa1':'add',
         'click #minus1':'minus',
         'click #mul2':'mul',
         'click #divide2':'div'
},
   add(){
         m.update( data: {n:m.data.n +1})
},
   minus(){
         m.update( data:{n:m.data.n -1})
},
   mul(){
         m.update( data: {n:m.data.n *2})
},
   div(){
         m.update(data: {n:m.data.n /2})
}

四,我是如何理解模块化

什么是模块化?为了减少面条式代码,每个部分、接口等彼此之间不知道彼此,互相也不影响,每个部分、接口都有属于自己的特定功能。又减少了代码量,复杂度,减少了资源的依赖。开发者也更容易维护,逻辑也更清晰。这样的代码方式,就是模块化。