MVC模式(Model-View-Controller)是软件工程中的一种软件架构模式,把软件系统分为三个基本部分:模型(Model)、视图(View)和控制器(Controller)。
MVC模式最早由Trygve Reenskaug在1974年[1]提出,是施乐帕罗奥多研究中心(Xerox PARC)在20世纪80年代为程序语言Smalltalk发明的一种软件设计模式。MVC模式的目的是实现一种动态的程式设计,使后续对程序的修改和扩展简化,并且使程序某一部分的重复利用成为可能。除此之外,此模式通过对复杂度的简化,使程序结构更加直观。软件系统通过对自身基本部份分离的同时也赋予了各个基本部分应有的功能。专业人员可以通过自身的专长分组:
- (控制器Controller)- 负责转发请求,对请求进行处理。
- (视图View) - 界面设计人员进行图形界面设计。
- (模型Model) - 程序员编写程序应有的功能(实现算法等等)、数据库专家进行数据管理和数据库设计(可以实现具体的功能)。

层次
模型(Model) “数据模型”(Model)用于封装与应用程序的业务逻辑相关的数据以及对数据的处理方法。“模型”有对数据直接访问的权力,例如对数据库的访问。“模型”不依赖“视图”和“控制器”,也就是说,模型不关心它会被如何显示或是如何被操作。但是模型中数据的变化一般会通过一种刷新机制被公布。为了实现这种机制,那些用于监视此模型的视图必须事先在此模型上注册,从而,视图可以了解在数据模型上发生的改变。(比较:观察者模式(软件设计模式))[编辑]
视图(View) 视图层能够实现数据有目的的显示(理论上,这不是必需的)。在视图中一般没有程序上的逻辑。为了实现视图上的刷新功能,视图需要访问它监视的数据模型(Model),因此应该事先在被它监视的数据那里注册。
控制器(Controller) 控制器起到不同层面间的组织作用,用于控制应用程序的流程。它处理事件并作出响应。“事件”包括用户的行为和数据模型上的改变。
在最初的JSP网页中,像数据库查询语句这样的数据层代码和像HTML这样的表示层代码混在一起。经验比较丰富的开发者会将数据从表示层分离开来,但这通常不是很容易做到的,它需要精心地计划和不断的尝试。MVC从根本上强制性地将它们分开。尽管构造MVC应用程序需要一些额外的工作,但是它带给我们的好处是毋庸置疑的。
首先,多个视图能共享一个模型。如今,同一个Web应用程序会提供多种用户界面,例如用户希望既能够通过浏览器来收发电子邮件,还希望通过手机来访问电子邮箱,这就要求Web网站同时能提供Internet界面和WAP界面。在MVC设计模式中,模型响应用户请求并返回响应数据,视图负责格式化数据并把它们呈现给用户,业务逻辑和表示层分离,同一个模型可以被不同的视图重用,所以大大提高了代码的可重用性。
其次,控制器是自包含(self-contained)指高独立内聚的物件,与模型和视图保持相对独立,所以可以方便的改变应用程序的数据层和业务规则。例如,把数据库从MySQL移植到Oracle,或者把RDBMS数据源改变成LDAP数据源,只需改变控制器即可。一旦正确地实现了控制器,不管数据来自数据库还是LDAP服务器,视图都会正确地显示它们。由于MVC模式的三个模块相互独立,改变其中一个不会影响其他两个,所以依据这种设计思想能构造良好的少互扰性的构件。
此外,控制器提高了应用程序的灵活性和可配置性。控制器可以用来连接不同的模型和视图去完成用户的需求,也可以构造应用程序提供强有力的手段。给定一些可重用的模型和视图,控制器可以根据用户的需求选择适当的模型机型处理,然后选择适当的的视图将处理结果显示给用户。
[编辑]评价及适用范围
MVC模式的缺点是由于它没有明确的定义,所以完全理解MVC模式并不是很容易。使用MVC模式需要精心的计划,由于它的内部原理比较复杂,所以需要花费一些时间去思考。开发一个MVC模式架构的工程,将不得不花费相当可观的时间去考虑如何将MVC模式运用到应用程序中,同时由于模型和视图要严格的分离,这样也给调试应用程序带来了一定的困难。每个构件在使用之前都需要经过彻底的测试。另外由于MVC模式将一个应用程序分成了三个部件,所以这意味着同一个工程将包含比以前更多的文件。
过去MVC模式并不适合小型甚至中等规模的应用程序,这样会带来额外的工作量,增加应用的复杂性。但现在多数软件设计框架,能直接快速提供MVC骨架,供中小型应用程序开发,此问题不再存在。对于开发存在大量用户界面,并且逻辑复杂的大型应用程序,MVC将会使软件在健壮性、代码重用和结构方面上一个新的台阶。尽管在最初构建MVC模式框架时会花费一定的工作量,但从长远的角度来看,它会大大提高后期软件开发的效率。
[编辑]Java 平台企业版 (J2EE)
和其他的各种框架不一样,J2EE为模型对象(Model Objects)定义了一个规范。
视图(View)
在J2EE应用程序中,视图(View)可能由Java Server Page(JSP)承担。生成视图的代码则可能是一个servlet的一部分,特别是在客户端服务端交互的时候。
控制器(Controller)
J2EE应用中,控制器可能是一个servlet,现在一般用Struts实现。
模型(Model)
模型则是由一个实体Bean来实现。
Swing是一个标准的MVC结构. ComponentUI代表View, 负责描画组件. 组件尤其Model层, 比如JTextField的Document, JTable的TableModel, JTree的TreeModel等等. 而Control可能不是很明显, 我们或许可以简单的将其Event机制看作一个Swing团队开发给开发者的Controller.
作为Java开发者, 如果想理解MVC的结构, 学习Swing的确是个不错的选择.
相关推荐
在维基百科里是这样定义的: 软件架构是一个系统的轮廓 . 软件架构描述的对象是直接构成系统的抽象组件. 面试的过程中会问到如何设计架构 ? 应用从哪几方面进行考虑 ? 架构的职责是什么 ? 你会发现这样的问题并不好...
"wikiGraphs" 是一个项目名称,暗示这是一个与维基百科相关的应用。它涉及到在维基百科页面中插入链接,并能够提取和处理页面中的表格数据。项目利用了 "主干(Backbone)" 框架,这是一款轻量级的JavaScript模型-...
3. **维基百科解释**: - 模型 - 视图 - 控制器(MVC)通常用于开发用户界面,将相关的程序逻辑分为三个相互关联的元素。这样做是为了将信息的内部表示与信息呈现给用户以及从用户接受信息的方式分开。
3. **应用程序框架**:提供了一个基于MVC(模型-视图-控制器)的开发环境,允许用户创建自定义应用。 4. **安全框架**:实现了用户认证、授权和访问控制,确保系统的安全性。 5. **扩展机制**:通过插件和宏系统,...
【博客空间】wiki.net(网络维基)源码v1.1是一款基于ASP.NET技术开发的开源项目,它提供了一个类似维基百科的在线协作编辑平台。这个项目的源码可以帮助开发者深入了解ASP.NET框架的运用,以及如何构建一个功能丰富...
文档,请参见Wiki模式-视图-控制器RxMVC支持使用RxSwift实现模型-视图-控制器模式,如下所示:(来自维基百科)不是txxxRxRxMVC使用RxSwift的模型-视图-控制器模式。 文档,请参阅Wiki模式-视图-控制器RxMVC支持使用...
首先,通过网络爬虫程序抓取百科类网站(如维基百科)的大量数据,提取关键信息,如概念、定义、相关实体等。这些信息经过预处理和整合后,构建成知识图谱的节点和边。Python因其丰富的库支持,如BeautifulSoup、...
这个项目可能是为了帮助用户创建和管理自己的在线百科全书或知识库,让用户能够方便地共享和编辑信息。 1. **ASP.NET基础**:ASP.NET提供了丰富的控件和框架,如GridView、Repeater等,用于快速构建网页。它支持...
"维基"一词再次确认了项目的类型,即基于维基百科理念的个人知识管理系统。"这种规模"可能指的是项目的技术复杂性,或者是指它覆盖的主题范围。 【标签】"C++" 指出该项目可能使用了C++编程语言作为主要开发工具。...
我们的数据集来自英文版的《科学》论文摘要,以及来自维基百科的英语知识库。 在前端Web开发中,我们构建了前端Web。 我们利用超文本标记语言(HTML)在Web浏览器中进行结构化和设计,并借助级联样式表(CSS)-样式...
维基百科简介 图像 使用的 API 谷歌地图 开放天气 API 维基百科API 谷歌图片API 使用的工具 - 网络脚手架工具 - 依赖管理工具 - 构建工具 - 无需介绍 - 具有双向数据绑定的 MVC 库 - 一个 jquery 插件,...
标题 "wikipedia-event-query" 暗示我们讨论的是一个与维基百科相关的查询系统,可能是一个用于检索或分析维基百科事件的数据工具。描述中的 "阿斯达" 和 "阿斯达斯" 可能是误输入或者不完整的词语,无法直接关联到...
这份手册是基于开源社区的贡献者所编写的,他们利用维基百科上的原始英文资料进行翻译和编辑,使得更多的中文用户能够无障碍地学习和掌握Kohana 3.0。 手册涵盖了Kohana 3.0的核心概念、安装、配置、路由系统、控制...
【My-Wiki:个人维基】是一个以Java技术为核心的个人知识管理系统,旨在帮助用户构建自己的私人百科全书。在这个系统中,你可以整理、存储和检索各种IT相关的知识点,特别是与Java编程语言紧密关联的信息。 首先,...
HDWiki是中国国内一款知名的开源百科系统,主要用于搭建类似维基百科的在线知识库。这个压缩包文件包含了HDWiki的v5版本的UTF编码源代码,是PHP开发者的宝贵学习资源。接下来,我们将深入探讨其中涉及的PHP编程知识...
它借鉴了维基百科和百度百科的成功模式,致力于提供一个协作编辑、分享和存储知识的环境,使得用户可以方便地创建、编辑和组织各种类型的信息。 **一、系统架构与技术栈** open-forum-server采用现代Web开发的MVC...
图表UML图解UML维基百科,维基百科,自由的百科全书。 1.1纳兹瓦程序 租车 1.2 Cel Aplikacji Głównymcelem stworzenia tej aplikacjibyłowykorzystanie w praktyce dotychczas zgromadzonej przeze mnie ...
授予:维基百科该项目的作者: 朱巴伊诺报告业务建模: Model :表示MVC设计模式的Model接口的接口。 游戏:收集游戏必要元素以能够向视图呈现外观的类。 GameStatus :枚举,表示游戏的不同状态。 棋盘:代表游戏...
资料来源:维基百科 Knut7- FRAMEWORK遵循体系结构模型视觉和控制器(MVC)模式,该模式可让您轻松重用代码。 它具有以下结构: 要求: PHP v7.x php的基本知识其余部分很容易。 链接到贡献并下载: : && 安装 ...