- 浏览: 17278 次
标签:
MVC是一种设计模式,它将应用划分为3个部分:数据(模型)、展现层(视图)和用户交互(控制器)。其中:
M - MODEL(模型)
V - VIEW(视图)
C - CONTROLLER(控制器)
一个事件的发生是这样的过程:
1. 用户和应用产生交互。
2. 控制器的事件处理器被触发。
3. 控制器从模型中请求数据,并将其交给视图。
4. 视图将数据呈现给用户。
不用类库或框架就可以实现这种MVC架构模式。关键是要将MVC的每部分按照职责进行划分,将代码清晰地分割为若干部分,并保持良好的解耦。这样可以对每个部分进行独立开发、测试和维护。
M-模型
模型用来存放应用的所有数据对象。比如,可能有一个User模型,用以存放用户列表、他们的属性及所有与模型有关的逻辑。模型不必知道视图和控制器的逻辑。任何事件处理代码、视图模板,以及那些和模型无关的逻辑都应当隔离在模型之外。将模型的代码和视图的代码混在一起,是违反MVC架构原则的。模型是最应该从应用中解耦出来的部分。
当控制器从服务器抓取数据或创建新的记录时,它就将数据包装成模型实例。也就是说,我们的数据是面向对象的,任何定义在这个数据模型上的函数或逻辑都可以直接被调用。
V-视图
视图层是呈现给用户的,用户与之产生交互。在JavaScript应用中,视图大都是由HTML、CSS、JavaScript模板组成的。除了模板中简单的条件语句之外,视图不应当包含任何其他逻辑。将逻辑混入视图之中是编程的大忌,这并不是说MVC不允许包含视觉呈现相关的逻辑,只要这部分逻辑没有定义在视图之内即可。我们将视觉呈现逻辑归类为“视图助手”(helper):和视图相关的独立的小工具函数。
C-控制器
控制器是模型和视图之间的纽带。控制器从视图获取事件和输入,对它们(很可能包含模型)进行处理,并相应地更新视图。当页面加载时,控制器会给视图添加事件监听,比如监听表单提交或按钮点击。然后,当用户和你的应用产生交互时,控制器中的事件触发器就开始工作了。
在网页交互中,可以这样理解:
1.用户点击了表格中的数据
2.触发了点击事件,数据变成可编辑的状态(这个时候会出现一个文本框,但是里面还没有数据)
3.第2步的点击事件从存放数据的模型中把数据放到文本框中,形成一种数据由不可编辑到可编辑的一种效果
举个例子:
上面程序会把选中的饮料的颜色显示出来,如果用MVC,就是这个样子:
进行分层之后,各个层次的功能清晰:V层控制界面显示,将界面与数据连接;M层存放数据,处理逻辑,C层用于连接M和V,但是,代码变复杂了。的确,层次越多,需要做的工作也越多,这里需要处理各层的通信。所以,具体怎么设计,还是要分析场景,因地制宜。
MVC是一种设计模式,它将应用划分为3个部分:数据(模型)、展现层(视图)和用户交互(控制器)。其中:
M - MODEL(模型)
V - VIEW(视图)
C - CONTROLLER(控制器)
一个事件的发生是这样的过程:
1. 用户和应用产生交互。
2. 控制器的事件处理器被触发。
3. 控制器从模型中请求数据,并将其交给视图。
4. 视图将数据呈现给用户。
不用类库或框架就可以实现这种MVC架构模式。关键是要将MVC的每部分按照职责进行划分,将代码清晰地分割为若干部分,并保持良好的解耦。这样可以对每个部分进行独立开发、测试和维护。
M-模型
模型用来存放应用的所有数据对象。比如,可能有一个User模型,用以存放用户列表、他们的属性及所有与模型有关的逻辑。模型不必知道视图和控制器的逻辑。任何事件处理代码、视图模板,以及那些和模型无关的逻辑都应当隔离在模型之外。将模型的代码和视图的代码混在一起,是违反MVC架构原则的。模型是最应该从应用中解耦出来的部分。
当控制器从服务器抓取数据或创建新的记录时,它就将数据包装成模型实例。也就是说,我们的数据是面向对象的,任何定义在这个数据模型上的函数或逻辑都可以直接被调用。
V-视图
视图层是呈现给用户的,用户与之产生交互。在JavaScript应用中,视图大都是由HTML、CSS、JavaScript模板组成的。除了模板中简单的条件语句之外,视图不应当包含任何其他逻辑。将逻辑混入视图之中是编程的大忌,这并不是说MVC不允许包含视觉呈现相关的逻辑,只要这部分逻辑没有定义在视图之内即可。我们将视觉呈现逻辑归类为“视图助手”(helper):和视图相关的独立的小工具函数。
C-控制器
控制器是模型和视图之间的纽带。控制器从视图获取事件和输入,对它们(很可能包含模型)进行处理,并相应地更新视图。当页面加载时,控制器会给视图添加事件监听,比如监听表单提交或按钮点击。然后,当用户和你的应用产生交互时,控制器中的事件触发器就开始工作了。
在网页交互中,可以这样理解:
1.用户点击了表格中的数据
2.触发了点击事件,数据变成可编辑的状态(这个时候会出现一个文本框,但是里面还没有数据)
3.第2步的点击事件从存放数据的模型中把数据放到文本框中,形成一种数据由不可编辑到可编辑的一种效果
举个例子:
<select id="drinkSelect"> <option value="coffee">coffee</option> <option value="milk">milk</option> <option value="juice">juice</option> </select> <p id="theColorOfDrink"></p> <script type="text/javascript"> document.getElementById("drinkSelect").onchange = function() { var color; var colorOfDrink = { "coffee":"brown", "milk":"white", "juice":"orange" }; color = colorOfDrink[this.value]; document.getElementById("theColorOfDrink").innerHTML = color; } </script>
上面程序会把选中的饮料的颜色显示出来,如果用MVC,就是这个样子:
<select id="drinkSelect"> <option value="coffee">coffee</option> <option value="milk">milk</option> <option value="juice">juice</option> </select> <p id="theColorOfDrink"></p> <script type="text/javascript"> //showDrinkColor is Controller var showDrinkColor = { start:function(){ this.view.start(); }, set:function(drinkName){ this.model.setDrink(drinkName); } }; //Model showDrinkColor.model = { colorOfDrink:{ "coffee":"brown", "milk":"white", "juice":"orange" }, selectedDrink:null, setDrink:function(drinkName){ this.selectedDrink = this.colorOfDrink[this.selectedDrink]?drinkName:null; this.onchange(); }, onchange:function(){ showDrinkColor.view.update(); }, getDrinkColor:function(){ return this.selectedDrink?this.colorOfDrink[this.selectedDrink]:"white"; } }; //View showDrinkColor.view = { start:function(){ document.getElementById("drinkSelect").onchange = this.onchange; }, onchange:function(){ showDrinkColor.set(document.getElementById("drinkSelect").value); }, update:function(){ document.getElementById("theColorOfDrink").innerHTML = showDrinkColor.model.getDrinkColor(); } }; showDrinkColor.start(); </script>
进行分层之后,各个层次的功能清晰:V层控制界面显示,将界面与数据连接;M层存放数据,处理逻辑,C层用于连接M和V,但是,代码变复杂了。的确,层次越多,需要做的工作也越多,这里需要处理各层的通信。所以,具体怎么设计,还是要分析场景,因地制宜。
发表评论
-
audio 音频格式测试数据
2017-09-20 16:15 538压缩包内含 wav格式语音,aac 格式语音和H.264 格式 ... -
web 端录音
2017-09-12 17:22 464<!DOCTYPE html> <ht ... -
js 获取浏览器类型和版本
2017-09-12 16:03 604function getExplore(){ var ... -
本地存储——cookie
2017-02-09 11:44 381cookie是客户端用来存储数据的一种选项,既可以设 ... -
本地存储的方式对比
2017-02-08 15:51 906本地存储方式有很多种,cookie、loca ... -
sublime text3 中文乱码
2016-11-29 17:19 386换了一个编译器,sublime text3, 但是存在中文乱码 ... -
CSS背景图与html插入img的区别
2016-11-01 19:03 3851、css中的图片以背景图形式存在,写在 ... -
HTTP 的三次握手和四次挥手
2016-10-12 16:04 393网络由下往上分为7层:物理层、数据链路层、网 ... -
SpriteSpin 一款图像360度旋转的jquery插件
2016-10-11 15:00 651在 web 页面上使用 jQuery 图像 36 ... -
Js冒泡排序
2016-09-29 17:02 340冒泡排序的原理是这样的,比方说有五个数字5432 ... -
圆形进度条(假的无限循环)
2016-08-30 11:21 927<div id="outer"& ... -
转载实用假进度条
2016-08-29 15:16 1480这是一款超酷CSS3 loading加载动画特效。该loadi ... -
hmtl 中div宽度不定时如何居中
2016-08-24 17:00 370传统的div居中方式margin: 0 auto;在div ... -
幻灯片式的图片点击切换
2016-08-16 17:09 347这是一款非常酷的纯css3响应式背景视觉差幻灯片插件。插件中使 ... -
工作后的第一篇博客
2016-08-16 10:59 383已经上班一个月零十一天了,也毕业两个月零十天了, ... -
JS性能优化的问题
2016-06-26 21:51 411一些关于JS性能的一些优化的小技巧: 1.关于JS的循环,循 ... -
手机页面自适应问题的解决方法(转)
2016-06-25 21:50 367其实主要就是改掉HTML页面声明: 在网页中加入以下代码, ... -
常见浏览器兼容问题(转载)
2016-06-25 21:30 301浏览器兼容问题一:不同浏览器的标签默认的margin和padd ... -
个人总结(二)
2016-06-20 15:04 357主流浏览器之间的差异: 谷歌浏览器Chrome支持自定义计划处 ... -
个人总结
2016-06-20 14:52 330H4和H5 的区别: h4的内容标签级别相同,无法区分各部分内 ...
相关推荐
在本项目中,我们主要探讨的是使用Web前端框架MVC中的Backbone.js来构建一个记账应用程序,同时结合后端技术Node.js(版本:lpNote-1.0)。这是一个典型的前后端分离的开发模式,旨在提供高效且用户友好的交互体验。...
在这个场景中,我们将深入探讨如何在ASP.NET MVC中进行前端与后端的数据传递,以及如何使用jQuery的Ajax方法实现这一过程。 首先,我们要理解MVC架构的基本概念。Model代表业务逻辑和数据,View负责展示用户界面,...
在前端MVC框架中,模型通常是由JavaScript对象或者函数构成的,它封装了数据以及对数据进行增删改查的操作。模型的职责是独立于用户界面的,它专注于数据的业务逻辑处理,并且可以被视图和控制器所引用。在复杂的...
前端MVC是指在前端开发中应用Model-View-Controller(模型-视图-控制器)架构模式的设计思想。这种架构模式来自于传统的后端开发领域,但是在前端开发中也同样适用。下面我们来详细介绍前端MVC的应用。 模型(Model...
在前端MVC中,事件驱动编程是关键。模型发出事件(如数据变更)时,视图和控制器可以通过事件监听器响应这些事件。这种方式增强了系统的响应性,因为只有当数据发生变化时,才会有相应的更新操作。 5. **分离关注...
- **结合MVC与Bootstrap**:在C#的MVC框架中引入Bootstrap前端框架,可以迅速搭建出响应式设计的web界面,同时利用Bootstrap的组件来简化开发。 - **日志记录**:通过配置log4net,可以记录应用运行时的各种日志信息...
总结,MVCx是一个针对Node.js环境的前端MVC框架,它提供了简洁的架构来组织前端代码,使开发过程更加有序。虽然它的功能可能不如一些主流框架全面,但在特定场景下,尤其是对轻量级框架有需求时,MVCx不失为一个好...
标题“豆瓣前端MVC”指的是豆瓣网在前端开发中采用的MVC(Model-View-Controller)架构模式。MVC是一种广泛应用于软件工程中的设计模式,主要用来将数据(Model)、用户界面(View)和控制逻辑(Controller)分离,...
【作品名称】:基于 jsp+servlet+mysql实现Web的宾馆管理系统, 前端semantic MVC(源码+课程设计报告) 【适用人群】:适用于希望学习不同技术领域的小白或进阶学习者。可作为毕设项目、课程设计、大作业、工程实...
【标题】中的“基于Web的宾馆管理系统 jsp+servlet+mysql 前端semantic MVC”表明这是一个使用Web技术实现的宾馆管理系统的实例,它采用了JavaServer Pages (JSP)、Servlet以及MySQL数据库作为核心技术栈,并且前端...
在"前端框架Bootstrap-MVC"中,"MVC"可能指的是模型-视图-控制器的设计模式,暗示这个框架可能是为了更好地组织和管理前端代码而设计的。 **Bootstrap框架的核心特性:** 1. **响应式设计**:Bootstrap内置了响应式...
新版阿尔法城项目的开发实践突显了前端MVC架构的应用价值,以及它在复杂Web应用开发中的实践方法。从提供的内容中,可以提炼出以下知识点: 1. **前端MVC架构的实践价值** MVC(Model-View-Controller)架构作为一...
总之,Web前端MVC框架在现代Web开发中扮演着重要角色,它们通过合理的架构设计,帮助开发者构建出高效、可维护的Web应用,满足了互联网时代对软件开发的高要求。随着技术的不断进步,前端MVC框架也在持续演进,为...
- Spring MVC的核心组件包括DispatcherServlet(前端控制器)、HandlerMapping(处理器映射器)、HandlerAdapter(处理器适配器)、ViewResolver(视图解析器)等。 6. **优势**: - 结构清晰:MVC模式将应用分为...
在C# MVC(Model-View-Controller)框架中,控制器是连接前端视图和后端模型的重要组件,负责处理用户请求、操作数据以及向视图传递数据。本篇将深入探讨C# MVC控制器如何实现前后端的数据交互。 一、基础知识 1. ...
这是结合博客的源码,链接是:http://blog.csdn.net/u012660464/article/details/53508757 。名为:Spring MVC+Maven 实现同一项目的前端和后台交互,该源码示例了前端和后台如何进行参数的绑定传递。
MVC3与.NET Framework 4.0兼容,这意味着你可以在已有的.NET 4.0项目中使用MVC3。此外,MVC3支持NuGet包管理器,使得开发者可以轻松地发现和添加第三方库,扩展应用功能。 总的来说,ASP.NET MVC3中文安装包为...
MVVM(Model-View-ViewModel)架构是MVC架构的一种变体,尤其在前端开发中更为常见。与MVC相比,MVVM的主要特点是: - **Model(模型)**:与MVC相同,负责数据管理和业务逻辑处理。 - **View(视图)**:展示数据...
在ASP.NET MVC中,可以使用内置的PagedList库或者自定义的分页逻辑来实现。 这个项目包含了一个详细的教程和代码示例,对于想要从WebForm转向MVC开发的人员来说,这是一个很好的学习资源。通过这个项目,你可以学习...
购物车整体流程: 目录结构将model view controller剥离开 ... 当用户对view进行操作时,触发注册的事件,通过command修改Model中的数据(购物车列表)从而再由command驱动view中的刷新表格进行渲染