MVC模式

  • mvc是由三个单词的首字符组成的:分别是模型model-视图view-控制器controller
  • 他是一种使用业务逻辑数据视图进行分离的方式来组织架构代码的一种模式。
  • 复杂项目中改变数据,很难判断那里改变
var MVC = {}
MVC.model = (function(){var data = {sidebar:[{title: 'sidebar1',href: './a.html'},{title: 'sidebar2',href: './b.html'},{title: 'sidebar3',href: './c.html'}]}return {getData: function(key){return data[key]},setData: function(key,value){data[key] = value}}
})()
MVC.view = (function(){var m = MVC.modelvar view = {createSidebar: function(){var data = m.getData('sidebar')var html = '',html += '<div id="siderbar">'for(var i = 0; i<data.length;i++){html += '<div class="sidebar-item" href="`+data[i].herf +`">`+ data[i].title +`</a></div>'}html += '</div>'document.body.innerHTML = html}}return function(v){view[v]();}
})()
MVC.ctrl = (function(){var m = MVC.modelvar v = MVC.viewvar c = {initSideBar: function(){v('createSidebar');}updateSideBar: function(){m.setDate('sidebar',[{title:'new sidebar', herf: './aa.html'}])}}return c
})()window.onload = function(){MVC.ctrl.initSideBar()setTimeout(function(){MVC.ctrl.updateSideBar()},3000)
}

MVVC模式

  • mvvm模式在mvc模式下进行改造,实现的其重在数据驱动视图的一种设计模式
  • 如何去实现数据和视图绑定
  1. 需要知道那个数据改变啦,一般我们可以使用数据访问对象的方法。在vue中我们使用的是es5的对象访问属性get/set
  2. 需要知道修改的这个数据跟那个视图有关联,观察者模式。
  3. 修改视图
//练习
var test = {_a: undefined,get a(){return this._a   }set a(newVal){this._a = newVal}
}
console.log(test.a)var test3 = {_a:111}
Object.defineProperty(test3,'a',{get: function(){return this._a}set: function(newVal){this._a = newVal}
})
console.log(test3.a)
test.a = 'abc'
console.log(test3.a)
/*var data = {a:1
}
var dep = [] //收集消息,消息中心
var target = null //订阅者或者叫做观察者
Object.defineProperty(data,'a',{get: function(){dep.push(target)},set: function(newVal){for(var i = 0;i<dep.length;i++){dep[i]()}}
})
function watch(exp,fn){target = fndata[exp]
}
watch('a',function(){console.log('我是监听a改变的函数')
})
data.a = 2*/
//几个问题
// 1. 我们现在访问不到a,并且a的值需要_a暂存
// 2. 目前只做啦一个数据的收集工作
// 3. 如果再次访问属性的时候就会重复收集依赖
var data = {a:1,b:2
}
for(var key in data){(function(key){var dep = [];var value = data[key]object.defineProperty(data,key,{get:function(){for(var i = 0;i < dep.length;i++){if(dep[i]===target){return value}}dep.push(target)return value},set: function(newVal){if(newVal !== value){value = newValfor(var i =0;i < dep.length; i++){dep[i]();}}}})})()
}
//var dep = [] //收集消息,消息中心
var target = null //订阅者或者叫做观察者
/*Object.defineProperty(data,'a',{get: function(){dep.push(target)},set: function(newVal){for(var i = 0;i<dep.length;i++){dep[i]()}}
})*/
function render(){document.write(`<div><h3>想显示一些文案`+ data.a +`</h3></div>`)
}
function watch(exp,fn){target = fnif(typeof exp === 'function'){exp()return}data[exp]
}
//watch('a',render)
watch(render,render)
data.a = 2
data.b = 3

MVC模式和MVVC模式相关推荐

  1. MVC+LINQToSQL的Repository模式之(二)数据基类

    namespace Data.TEST {     /// <summary>     /// 数据操作基类     /// </summary>     public abs ...

  2. MVC模式和DDD模式对比,谁才是银弹?

    目录 MVC模式和DDD模式对比,谁才是银弹? 从DDD的角度看MVC架构的问题 第一层:初出茅庐 第二层:草船借箭(战术设计) 第三层:运筹帷幄(战略设计) DDD的不足 总结 MVC模式和DDD模 ...

  3. php cli python,PHP MVC框架 CodeIgniter CLI模式简介

    PHP MVC框架 CodeIgniter CLI模式简介 分类:PHP_Python| 发布:佚名| 查看: | 发表时间:2014/7/25 让我们以Hello World为例,首先创建一个简单的 ...

  4. MVC三层架构的模式

    大家好,今天给大家分享一下MVC 三层架构的模式 首先你要知道,所谓的MVC就是一种面向于javaee企业级开发的设计模式 这里要强调一点,MVC 不是一种技术,不是一种像spring 那样的框架,它 ...

  5. 【Django框架设计模式】MVC模式与MTV模式区别

    在Django中的MTV模式是MVC模式的迁移,其中MTV模式中将MVC模式中的V(视图)= V(视图)+ T(模板). MVC设计模式 MVC,是模型(Model).视图(View).控制器(Con ...

  6. vue源码尝试mvvc模式实现

    注意点:本文是最简化的mvvc模式,并没有考虑深度拷贝,深度监听等较为复杂的东西. 1.第一步,建立mvvc.js(建立mvvc模式),observer.js(监听),compile.js(渲染),w ...

  7. 基于MVC模型和分层模式完成登录和注册

    1.MVC概述 Model.view.Controller即模型.视图.控制器.是软件的一种架构模式(Architecture pattern).MVC要实现的目标是将软件的用户界面和业务逻辑分离,可 ...

  8. 这是一份全面 清晰的架构设计指南:MVC、MVP MVVM模式(含实例讲解)

    前言 在Android开发中,当你梳理完需求后,你要做的并不是马上写下你的第一行代码,而是需先设计好整个项目的技术框架 今天,我将全面介绍Android开发中主流的技术框架MVC.MVP 与 MVVM ...

  9. Repository模式与UnitOfWorks模式的运用

    软件开发就像是一个江湖,而设计模式就是一本高深的秘籍每读一次.用一次.想一次都能得到新的领悟,让我们的设计技能有所提高.开始时我们可能会"为了模式而模式",让代码变得乱78糟甚至难 ...

最新文章

  1. python在金融工程中的用途-金融工程现在用python多吗?
  2. 程序包不存在?无源文件?找不到文件?找不到或无法加载主类?
  3. Repo 命令参考资料
  4. 极大似然估计(Maximum Likelihood)与无监督
  5. 编译原理—语义分析(Java)
  6. php send helo/ehlo first错误,phpmailer发送邮件提示SMTP server error怎么回事?
  7. java静态初始化模块,在静态初始化程序块中加载java属性
  8. 程序员离无人值班有多远?
  9. linux scp 非22端口,[ssh scp sftp] 连接远程ssh非22端口的服务器方法
  10. 雕刻机可以制作PCB
  11. 620集成显卡和mx250,残血还是满血?一招看清MX250显卡真面目
  12. win10如何使用低版本的IE浏览器?
  13. 牛客题——点击消除(go)
  14. 容器和云原生(一):初识容器化和云原生
  15. Labview 编写TCP/IP 客户端断线重连机制程序,亲测可用
  16. 用c语言编译对数函数,在C语言中使用对数函数的方法
  17. 【路径规划】基于蚁群算法求解公交车路径规划问题matlab源码
  18. iphone 屏幕大小
  19. 如何持续推动人工智能技术的前进与落地成为当下关注点
  20. cors数据类型_在外出RTK测量作业时,学会正确使用千寻cors账号,你才是最靓的仔...

热门文章

  1. 2010年度十大杰出IT博客
  2. 经不住似水流年,逃不过此间少年
  3. Golang中 int int8 int16 int32 int64的区别和取值范围
  4. Logistic回归-机器学习
  5. 算法-给定一个字符串S = “I am a student. “,则输出“student. a am I“。
  6. Potplayer提升画质攻略
  7. 微软可疑更新DhMachineSvc.exe
  8. 云中心-redis清除缓存命令
  9. 暑期 2020 之 “大咖说开源” 讲座题目征集
  10. 怎么保存退出 vim 编辑