MVC

作者: _William_Zhang | 来源:发表于2018-08-10 09:49 被阅读3次

一、简介

MVC是三个单词的首字母缩写,它们是Model(模型)View(视图)Controller(控制)

这个模式认为,程序不论简单或复杂,从结构上看,都可以分成三层。

1)最上面的一层,是直接面向最终用户的"视图层"(View)。它是提供给用户的操作界面,是程序的外壳。

2)最底下的一层,是核心的"数据层"(Model),也就是程序需要操作的数据或信息。

3)中间的一层,就是"控制层"(Controller),它负责根据用户从"视图层"输入的指令,选取"数据层"中的数据,然后对其进行相应的操作,产生最终结果。

这三层是紧密联系在一起的,但又是互相独立的,每一层内部的变化不影响其他层。每一层都对外提供接口(Interface),供上面一层调用。这样一来,软件就可以实现模块化,修改外观或者变更数据都不用修改其他层,大大方便了维护和升级。

二、代码解释

var model = {
    data: null,
    init(){}
    fetch(){}
    save(){}
    update(){}
    delete(){}
}
view = {
    init() {}
    template: '<h1>hi</h1'>
}
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(){}
}

1.Mode(模型)

// var model = Model({ resourceName: 'Message' })
window.Model = function (options) {
    let resourceName = options.resourceName
    return {
        init: function () {
            var APP_ID = 'hg9Xg2ojqCnRblDNUbxva3Ba-gzGzoHsz'
            var APP_KEY = '1FfsrmfHjz0LmzNIseyLJHld'
            AV.init({
                appId: APP_ID,
                appKey: APP_KEY
            });
        },
        fetch: function () {
            var query = new AV.Query(resourceName)
            return query.find() //Promise 对象 
        },
        save: function (object) {
            var X = AV.Object.extend(resourceName);
            var x = new X();
            return x.save(object)  //Promise 对象
        }

    }
}

2.View(视图)

//var view = View('.xxx')
window.View = function(selector){
    return document.querySelector(selector)
}

3.Controller(控制)

/*
Controller({
    init:(){
        this.view
        this.model
        this.xxx()
        this.yyy()
    },
    xxx()
    yyy()
})
*/
window.Controller = function (options) {
    var init = options.init
    let object = {
        view: null,
        model: null,
        init: function (view, model) {
            this.view = view
            this.model = model
            this.model.init()
            init.call(this, view, model)
            this.bindEvents.call(this)
        },
    }
    console.log('object')
    console.log(object)
    // debugger
    console.log('options')
    console.log(options)
    // debugger
    for (let key in options) {
        if (key !== 'init') {
            object[key] = options[key]
        }
    }
    console.log('新的 object')
    console.log(object)
    // debugger
    return object
}

相关文章

网友评论

      本文标题:MVC

      本文链接:https://www.haomeiwen.com/subject/nxtkbftx.html