MVC

一、简介

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
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 前言 看了下上篇博客的发表时间到这篇博客,竟然过了11个月,罪过,罪过。这一年时间也是够折腾的,年初离职跳槽到鹅厂...
    西木柚子阅读 21,350评论 12 184
  • 又看到有人在问三层架构和MVC的关系,感觉这种问题有点教条化了。因为它们都在逻辑上将应用程序划为三块,凑了一个数字...
    Ludiwgbet阅读 5,934评论 1 12
  • 和MVC框架模式一样,Model模型处理数据代码不变在Android的App开发中,很多人经常会头疼于App的架构...
    ppice阅读 9,805评论 2 17
  • 一同事新戴一条施华洛世奇天鹅水晶项链,长长的链子前缀后曳,凭添几分婉丽。 乍见,美言嘉奖两句:项链好漂亮,脖颈后面...
    灵山阅读 1,553评论 0 0
  • 我最近有点头痛,倒不是什么身体不适导致的脑子里某个地方拒绝正常运行,而是“头疼”我一光着屁股玩到大的闺蜜。我暂且称...
    婵_明阅读 1,677评论 3 1