浅谈MVC

318 阅读3分钟

MVC是什么?

MVC是一种架构设计模式,它通过关注点分离鼓励改进应用程序组织。

每个模块都可以写成三个对象,分别是:

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

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

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

const v = {
  //元素
  el: null,
  html: ``,
  init() {},
  render(n) {}
}

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

const c = {
  init() {},
  events: {},
  autoBindEvents() {}
}

MVC模式的目的是实现一种动态的程序设计,使后续对程序的修改和扩展简化,并且使程序某一部分的重复利用成为可能。除此之外,此模式透过对复杂度的简化,使程序结构更加直观。

EventBus

介绍

EventBus 事件总线,通常作为多个模块间的通信机制,相当于一个事件管理中心,一个模块发送消息,其它模块接受消息,就达到了通信的作用。

结合jQuery在MVC中的使用

const eventBus = $(window)
// 此时eventBus就有了on、trigger方法

eventBus.trigger('eventName')
// 触发eventName事件

eventBus.on('eventName', () => {})
// 监听eventName事件,事件触发后执行箭头函数

表驱动编程

当存在大批类似但不重复的代码时,可以将其中重要数据做成哈希表,以简化代码。

使用if-else的代码:

const getWeek = (value) => {
    if(value === 1){
        return "星期一";
    }else if(value === 2){
        return "星期二";
    }else if(value === 3){
        return "星期三";
    }else if(value === 4){
        return "星期四";
    }else if(value === 5){
        return "星期五";
    }else if(value === 6){
        return "星期六";
    }else if(value === 0){
        return "星期日";
    }
}

使用表驱动编程:

const getWeekMap = {
    "1": "星期一",
    "2": "星期二",
    "3": "星期三",
    "4": "星期四",
    "5": "星期五",
    "6": "星期六",
    "0": "星期日"
    }
const getWeek = (value) => {
    return getWeekMap[value]
}

我如何理解模块化

模块化是把一个大的代码块拆分成若干个小片段(模块)的过程,然后就可以在其他模块中调用这些模块了。代码的模块化非常类似于数据的规范化,得到的好处是相同的,而且还有一些额外的优点。利用模块化,我们的代码可以:

重用性更好

通过把一大段代码或者整个程序分解成独立的"即插即用"的组件,我们经常发现,许多模块其实可以被当前应用中的其他程序使用。只要有良好的设计,这些工具程序甚至可以用于其他应用程序。

管理性更好

一个1000行的程序或者5个单独的每个只有200行的并且互相调用的程序,你更愿意调试哪一个?在处理小任务时,我们的注意力会更加集中,也能处理的更好。我们可以在每个程序范围进行测试和调试(也叫做单元测试),然后再把这些独立的模块合并起来,进行一个更复杂的集成测试。

可读性更好

模块可以被命名,可以通过名字来描述其行为。通过程序接口隐藏起来的代码越多,程序行为就越容易阅读和理解。通过模块化,我们可以更专注于程序全局而不是一个个单独的可执行语句。我们甚至可以实现最隐蔽的软件:完全自我说明的代码。

更可靠的代码

按照模块化思路生成的代码的错误会更少。而且就算是有错误,也会因为它们已经被隔离在模块范围中而更容易被修正。而且,由于代码量更少并且可读性更好,我们维护起来也更容易。