MVC可以说是一种设计模式。
那么设计模式又是什么?简单来讲就是一种对代码的优化方案。
当我们构筑代码时,一而再再而三地出现重复代码甚至
类似地页面重复数次,就会发现代码十分冗余,这时就要引入MVC等设计模式来优化代码,做到Don’t Repeat Yourself。
MVC具体指什么?
MVC将代码分为三个部分,分别是
M:Model 数据模型 负责操作所有数据
V:View 视图 负责所有UI界面
C:Controller 控制器 负责其他
//将数据存储进m,作为整个地m,其他两个也是类似的
const m = {
get() {},
set(n) {}
}
EventBus
EventBus
拥有on
,trigger
等事件,可以用作组件间的通信。在MVC中可以使用EventBus用于通信。
EventBus 基本的 API 有 on
(监听事件),trigger
(触发事件), off
(取消监听)方法。
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)
}
表驱动编程
表驱动法是一种编程模式(scheme)——从表里面查找信息而不使用逻辑语句(if和case)。事实上,凡是能通过逻辑语句来选择的事物,都可以通过查表来选择。对简单的情况而言,使用逻辑语句更为容易和直白。但随着逻辑链的越来越发杂,查表法也就愈发显得更具吸引力。
简单来讲就是通过观察重复代码,将其归纳简化为较短的代码
//如下是一串重复多次的代码
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})
}
模块化
简单的代码使用模块化反而复杂,但是越是大型的项目模块化能让其变得更加清晰分明。
将一个复杂的程序依据一定的规则(规范)封装成几个块(文件)并进行组合。
模块的内部数据的实现是私有的,只是向外部暴露一些接口(方法)与外部其他模块通信。这则就是模块化。
模块化可以降低代码耦合度,减少重复代码,提高代码重用性,并且在项目结构上更加清晰,便于维护。
模块化的几个好处:
1、避免变量污染,命名冲突
2、提高代码的复用率
3、提高维护性
4、修改代码只会改动一处模块,而不会牵一发而动全身