浅析 MVC
MVC 三个对象分别做什么,给出伪代码示例
MVC是三个单词的首字母缩写,它们是Model(模型)、View(视图)和Controller(控制)。
这个模式认为,程序不论简单或复杂,从结构上看,都可以分成三层。
1)最上面的一层,是直接面向最终用户的"视图层"(View)。它是提供给用户的操作界面,是程序的外壳。
2)最底下的一层,是核心的"数据层"(Model),也就是程序需要操作的数据或信息。
3)中间的一层,就是"控制层"(Controller),它负责根据用户从"视图层"输入的指令,选取"数据层"中的数据,然后对其进行相应的操作,产生最终结果。
这三层是紧密联系在一起的,但又是互相独立的,每一层内部的变化不影响其他层。每一层都对外提供接口(Interface),供上面一层调用。这样一来,软件就可以实现模块化,修改外观或者变更数据都不用修改其他层,大大方便了维护和升级。
const m = {
data :{
time : new Date()
},
update: function(data){
m.data.time = data
}
}
//model得到数据
const v = {
el: null,
html:`<span>{{time}}<span><button id="getTime">得到时间</button>`,
init: function(container){
v.el = document.querySelector(container)
},
render: function(time){
v.el.innerHTML = v.html.replace('{{time}}',time)
},
selector:function(btn){
return document.querySelector(btn)
}
}
//view展示数据和重新渲染
const c = {
init:function(container){
v.init(container)
v.render(c.deal())
c.autoBindEvents()
},
events:{'click #getTime':'reset'},
//表驱动的数据
deal:function(){
let hour = m.data.time.getHours()
let minute = m.data.time.getMinutes()
let sec = m.data.time.getSeconds()
return `${hour}:${minute}:${sec}`
},
reset:function(){
m.update(new Date())
v.render(c.deal())
c.autoBindEvents()
},
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.selector(part2).addEventListener(part1, value)
}
}
//表驱动的功能部分
}
//control负责处理m的数据和控制m和v c.init('#app')
//往需要的html标签里写入当前时间,按钮可以更新时间
EventBus 有哪些 API,是做什么用的,给出伪代码示例
const EventBusObj = new EventBus()
const f1=(p)=>{
console.log('f1')
console.log(p)
}
const f2=(p)=>{
console.log('f2')
console.log(p)
}
//注册
EventBusObj.$on('event1',f1)
//监听一次
EventBusObj.$once('event1',f2)
//触发
EventBusObj.$emit('event1',{a:1})
//移除event1的f1方法
EventBusObj.$remove('event1',f1)
表驱动编程是做什么的(可以自己查查资料)
代码大全》对表驱动编程的描述:
表驱动方法是一种使你可以在表中查找信息,而不必用逻辑语句(if 或 case)来把他们找出来的方法。事实上,任何信息都可以通过表来挑选。在简单的情况下,逻辑语句往往更简单而且更直接。但随着逻辑链的复杂,表就变得越来越富于吸引力了。
表驱动编程的意义在于逻辑与数据的分离。(类似于事件委托)
例如:if-else
function translate(term) {
if (term === '1') {
return '一'
} else if (term === '2') {
return '二'
} else if (term === '3') {
return '三'
} else {
return '???'
}
}
// 如果想添加一个新的名词翻译,需要再添加一个if-else逻辑,例如:
function translate(term) {
if (term === '1') {
return '一'
} else if (term === '2') {
return '二'
} else if (term === '3') {
return '三'
} else if (term === '4') {
// 此处添加了一个新的名词翻译
return '四'
} else {
return '???'
}
}
表驱动:
function translate(term) {
let terms = {
'1': '一',
'2': '二',
'3': '三'
}
return terms[term];
}
// 如果想添加一个新的名词翻译,只需要在terms中添加一个新的表项,不需要修改整个逻辑
function translate(term) {
let terms = {
'1': '一',
'2': '二',
'3': '三'
'4': '四' // 添加一个新的名词翻译
}
return terms[term];
}
我是如何理解模块化的
模块化编程我的理解就是把需要的代码按照其功能分割开,这样必要时可以复用,代码可以不用揉在一起,难以管理和修改。

浙公网安备 33010602011771号