一、MVC的三个对象
MVC 模式代表 Model-View-Controller(模型-视图-控制器) 模式。这种模式用于应用程序的分层开发。
M:Model数据管理,主要负责和服务器进行交互。将请求到的数据传给Controller。
V:View视图,负责所有UI界面,HTML 渲染等。
C:Controller 负责监听并处理View 的事件,更新和调用 Model;也负责监听 Model的变化(Model从服务器获得数据),并更新 View。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.on()监听事件
EventBus.trigger()触发事件
EventBus.off()取消事件
例如:当一个事件执行,eventBus 触发 m:updated
eventBus.trigger('m:updated')
监听 m:updated,当 m:updated 触发时,执行事件
eventBus.on('m:updated',()=>{
v.render(m.data.n)
})
三、表驱动编程
表驱动方法编程(Table-Driven Methods)是一种编程模式,适用场景:消除代码中频繁的if else或switch case的逻辑结构代码,使代码更加直白。
如下列代码简化前:
$('#add').on('click', ()=>{
number += 1
$number.text(number)
localStorage.setItem('number', number)
})
$('#minus').on('click', ()=>{
number -= 1
$number.text(number)
localStorage.setItem('number', number)
})
$('#mult).on('click', ()=>{
number *= 2
$number.text(number)
localStorage.setItem('number', number)
})
$('#divide).on('click', ()=>{
number /= 2
$number.text(number)
localStorage.setItem('number', number)
})
简化后
events: {
'click #add1': 'add',
'click #minus1': 'minus',
'click #mul2': 'mul',
'click #divide2': 'div',
},
add() {
m.update({n: m.data.n + 1})
},
minus() {
m.update({n: m.data.n - 1})
},
mul() {
m.update({n: m.data.n * 2})
},
div() {
m.update({n: m.data.n / 2})
},
四、对于模块化的理解
将一个复杂的程序依据一定的规则(规范)封装成几个块(文件)并进行组合。模块的内部数据的实现是私有的,只是向外部暴露一些接口(方法)与外部其他模块通信,这就是模块化。
模块化可以降低代码耦合度,减少重复代码,提高代码重用性,并且在项目结构上更加清晰,便于维护。
模块可以理解为这个世界上有不同的行业,也可以理解为一个家里也有不同的分工,所以分模块可大可小,可以在大的模块里去区分子模块。总之模块是为了解决业务的耦合。就像分行业也是为了解决社会的耦合,但模块之间并不会区分的很彻底,就像各行各业总会有所关联,所以这也需要程序设计者们把握好度了。