MVC(Model-View-Controller,模型-视图-控制器)是软件工程中的一种软件架构模式,它把软件系统分为三个基本部分:模型(Model)、视图(View)、控制器(Controller)。
MVC不是一种设计模式(Design Pattern),而是一种架构模式(Architectural Pattern),用以描述应用程序的结构以及结构中各部分的职责和交互方式。它最先是在1979年的时候第一次被人提出,不过,当时环境有些不同,网络应用的概念在当时还不存在。
提姆·伯纳斯李(
Tim Berners-Lee)在上世纪九十年代初期的时候播种下了万维网(WWW)的种子,并永远的改变了世界。目前我们在网络开发中所采用的这种模式实际上是原版模式的一个改编版。这种架构模式的疯狂流行是由于两个极其流行的开发框架将这种模式包含了进来,它们是:
Struts 和
Ruby on Rails。这两个开发框架给稍后诞生的数百框架打上了深深的烙印。
1、 MVC 三层架构
模型(Model): 数据模型用于封装与应用程序的业务逻辑相关的数据以及对数据的处理方法。模型有对数据直接访问的权力,例如对数据库的访问。“模型”不依赖“视图”和“控制器”,也就是说,模型不关心它会被如何显示或是如何被操作。但是模型中数据的变化一般会通过一种刷新机制被公布。为了实现这种机制,那些用于监视此模型的视图必须事先在此模型上注册,从而,视图可以了解在数据模型上发生的改变。(比较:软件设计模式中的观察者模式)
视图(View): 视图层能够实现数据有目的的显示(理论上,这不是必需的)。在视图中一般没有程序上的逻辑。为了实现视图上的刷新功能,视图需要访问它监视的数据模型,因此应该事先在被它监视的数据那里注册。
控制器(Controller): 控制器起到不同层面间的组织作用,用于控制应用程序的流程。它处理事件并作出响应。“事件”包括用户的行为和数据模型上的改变。
- 控制器(Controller)- 负责转发请求,对请求进行处理。
- 视图(View) - 界面设计人员进行图形界面设计。
- 模型(Model) - 程序员编写程序应有的功能(实现算法等)、数据库专家进行数据管理和数据库设计(可以实现具体的功能)。
2、MVC原理
MVC(模型-视图-控制器)架构模式背后的思想非常简单,我们的应用程序中必须区分下面这些职责:
应用程序被分成了三个主要的部分,每个部分负责掌管不同的任务。
3、MVC模式的网络应用
控制器(Controller)
控制器掌管着用户的请求(当用户点击图形用户界面(GUI)上的元素执行操作时,控制器会收到HTTP GET或者POST请求)。它的主要功能就是调用并协调需要的资源/对象来执行用户请求。通常控制器会为任务调用合适的模型,以及选择合适的视图。
模型(Model)
模型是指运用于数据之上的数据规则和数据内容,它一般对应于应用程序所要管理的对象。在软件系统中,任何事物都可以被抽象成可以对其以某种方式进行处理的数据模型。应用程序中的用户,信息以及图书是什么?它们只是一堆必须按照对应规则处理的数据(日期不能是未来的日期,电子邮件有特定的格式,名字的长度不能超过多少字符等等)。
模型给控制器提供了一个用户请求内容对应的数据表达(比如信息,书,相册)。不管我们如何向用户展示,这个数据模型都不会变。这也是我们为什么可以随意选择使用哪个视图来展示数据的原因。模型包含我们应用程序逻辑中最重要的组成部分,这些逻辑运用于我们要处理的问题过程中。控制器更多的是包含应用程序自身的内部组织逻辑。
视图(View)
视图提供了展示模型数据的不同方式。它可能是数据填充的模板。视图可以有多个,而控制器则决定使用哪个视图。一个网络应用通常由许多控制器,模型和视图组成。控制器可以被看成是一个主控制器,用于接收用户的所有请求,然后在调用特定的控制器来处理不同的情况。
4、MVC 优点
MVC的一个最明显好处就是它将视图展示和应用逻辑清晰的分离开来。
对不同用户以及不同设备类型的支持一直是当下的一个常见问题,例如:
来自台式电脑和手机的请求所得到的视图应该是不相同的,模型会返回完全相同的数据,但是不同的地方是控制器会选择使用的视图文件来展示数据(我们可以把它看作是不同的模板)。
除了将视图从业务逻辑中分离开外,MVC的分离也降低了大型应用设计的难度,代码也更具结构性,因此也更容易维护,测试和重用。
5、MVC 适用场景
MVC模式的缺点是由于它没有明确的定义,所以完全理解MVC模式并不是很容易。使用MVC模式需要精心的计划,由于它的内部原理比较复杂,所以需要花费一些时间去思考。开发一个MVC模式架构的工程,将不得不花费相当可观的时间去考虑如何将MVC模式运用到应用程序中,同时由于模型和视图要严格的分离,这样也给调试应用程序带来了一定的困难。每个构件在使用之前都需要经过彻底的测试。另外由于MVC模式将一个应用程序分成了三个部件,所以这意味着同一个工程将包含比以前更多的文件。
過去MVC模式并不适合小型甚至中等规模的应用程序,这样会带来额外的工作量,增加应用的复杂性。但現在多數軟體設計框架,能直接快速提供MVC骨架,供中小型應用程序開發,此問題不再存在。对于开发存在大量用户界面,并且逻辑复杂的大型应用程序,MVC将会使软件在健壮性、代码重用和结构方面上一个新的台阶。尽管在最初构建MVC模式框架时会花费一定的工作量,但从长远的角度来看,它会大大提高后期软件开发的效率。
6、 MVC 实现示例
1)MFC
MFC(Microsoft Foundation Classes) Document/View架构,是微软早期对于MVC模式的实现,MFC将工程分成CView 和 CDocument 两大类,其中的Document对应MVC中的Model,View相当于MVC中的View+Controller,再加上CWinApp类别,合成三大项,但是MFC基本上是一个失败的MVC模式作品。
由于MFC之下的Document/View定义过于模糊,未将Controller(MessageMap)部份取出,因此Controller可以置入View或Document,但不管置入哪一方面,都会与View或Document绑死,没有弹性。
2)Swing
Swing,是一个标准的MVC结构。ComponentUI代表View,负责描画组件。组件尤其Model层,比如JTextField的Document, JTable的TableModel, JTree的TreeModel等等。
而Control可能不是很明显,我们或许可以简单的将其Event机制看作一个Swing团队开发给开发者的Controller。
作为Java开发者, 如果想理解MVC的结构,学习Swing的确是个不错的选择。
3).NET(ASP.NET、VB.NET、C#.NET)
ASP.NET,针对视图(View)和控制器(Controller)的模式没有被很好地定义,而模型(Model)则留给开发者去设计。
ASP.NET 不严格需要一个模型,开发者可以自行选择创建一个模型类,但是很多人选择放弃这一步,直接把事件处理放在控制器里处理任何计算、数据保存等等。但用模型来包含商业逻辑和数据存取是可实现的。
4)Qt Design
Qt,是一个跨平台的C++应用程式开发框架,广泛用于开发GUI程式,这种情况下又被称为部件工具箱,也可用于开发非GUI程式,比如控制台工具和服务器。
Qt Design 开发界面类似于ASP.NET,把视图(View)和控制器(Controller)隔离看来,模型(Model)由设计者自己设计。
经过多年发展,Qt不但拥有了完善的C++图形库,而且近年来的版本逐渐整合了数据库、OpenGL库、多媒体库、网络、脚本库、XML库、WebKit库等等,其核心库也加入了进程间通信、多线程等模块,极大的丰富了Qt开发大规模复杂跨平台应用程序的能力,真正意义上实现了其研发宗旨“Code Less; Create More; Deploy Anywhere.”
此外,Python、Perl、Ruby、JavaScript 等脚本,也各自有自己的MVC架构实现,感兴趣的可以参见:mvc
参考推荐:
MVC架构模式
MVC(wiki)
分享到:
相关推荐
MVC 模式代表 Model-View-Controller(模型-视图-控制器) 模式。这种模式用于应用程序的分层开发。 Model(模型) - 模型代表一个存取数据的对象或 JAVA POJO。它也可以带有逻辑,在数据变化时更新控制器。 View...
《JSP毕业设计——MVC设计模式在游戏卡在线销售系统中的应用》 在这个毕业设计项目中,我们探讨了如何运用MVC(Model-View-Controller)设计模式来构建一个基于JSP的游戏卡在线销售系统。JSP(JavaServer Pages)是...
MVC(Model-View-Controller)模式是一种软件设计模式,它在Web应用中广泛使用,旨在提高代码的可维护性和可扩展性。MVC将应用程序分为三个主要组件:模型(Model)、视图(View)和控制器(Controller),各自负责...
### 一种新的网络应用程序开发框架——MVC* #### 摘要 MVC(Model/View/Controller)设计模式自Smalltalk-80时代以来便成为软件设计领域中不可或缺的一部分。本文详细介绍了一种创新性的网络应用程序开发框架,该...
mvc设计模式详解 mvc设计模式是一种广泛流行的软件设计模式,早在70年代,IBM就推出了Sanfronscisico项目计划,其实就是mvc设计模式的研究。mvc模式在j2ee平台上非常流行,也是广大java开发者非常感兴趣的设计模型...
Struts是一个基于Java的开源框架,专门用于构建企业级Web应用程序,遵循Model-View-Controller(MVC)设计模式。它旨在帮助开发者更好地控制Web项目的复杂性,并提高代码的专业性和可维护性。Struts利用Servlet和...
《设计模式——Java语言中的应用》是一本专为Java开发者深入理解面向对象设计而编写的经典书籍。设计模式是软件工程领域中经过实践验证的、解决常见问题的有效方案,它们代表了在特定上下文中,针对特定问题的最优...
Spring MVC 是一款基于 Java 的轻量级 Web 开发框架,它是 Spring 框架的重要组成部分,主要用于构建 MVC(Model-View-Controller)模式的 web 应用程序。本项目是针对初学者设计的一个简单示例,旨在帮助新手快速...
java课程设计作业——模仿大富翁游戏,使用Java Swing (GUI) 实现的单机游戏,遵循MVC设计模式 A Java Swing (GUI) game. 单机版的大富翁游戏,纯Java实现,采用MVC设计模式。 所有素材来自 大富翁客户端+冒险岛...
1.2 Smalltalk MVC中的设计模式 3 1.3 描述设计模式 4 1.4 设计模式的编目 5 1.5 组织编目 7 1.6 设计模式怎样解决设计问题 8 1.6.1 寻找合适的对象 8 1.6.2 决定对象的粒度 9 1.6.3 指定对象接口 9 1.6.4 描述对象...
MVC(Model-View-Controller)设计模式是一种广泛应用于Web开发中的架构模式,它通过将应用程序分解成三个核心组件——模型(Model)、视图(View)和控制器(Controller)——来提高系统的灵活性和可维护性。...
本项目——“学生选课系统实训项目”,是一个基于MVC(Model-View-Controller)设计模式的未完成版,尽管如此,它已经实现了基本的增查改功能,对于学习和理解JavaWeb开发,特别是MVC架构有极大的帮助。 首先,让...
本项目——“基于MVC设计模式和三层架构的设备维护配送实时监控系统研究与实现代码”,旨在展示如何利用这两种主流的设计模式来构建一个功能完善的实时监控系统。下面将详细阐述这两个设计模式以及相关技术在系统中...
在具体实践中,我们可以看到,Qt4的MVC(Model-View-Controller)架构与设计模式相辅相成。模型(Model)负责数据处理,视图(View)负责数据展示,控制器(Controller)处理用户输入,这种分离职责的方式符合很多...
本篇复习笔记主要关注的是JSP构架以及MVC(Model-View-Controller)设计模式的应用。 MVC设计模式是软件工程中的一种架构模式,它将应用程序分为三个核心部分:模型(Model)、视图(View)和控制器(Controller)...
【MVC设计模式详解及其在Web应用框架中的应用】 MVC(Model-View-Controller)设计模式是软件工程中一种广泛应用于Web应用开发的架构模式,尤其在J2EE环境中,它有效地分离了应用程序的不同部分,提高了代码的可...
MVC是一种软件设计模式,常用于构建Web应用。它将应用分为三个主要部分:模型(Model),视图(View)和控制器(Controller)。模型负责处理数据和业务逻辑,视图负责展示数据,控制器接收用户输入并调用模型和视图...
本文是一篇完整论文,后面附上了研发代码,详细地说明了整体思路和详细描述
MVC设计模式是为了解决大型Web应用中频繁变更的问题,它将界面与业务逻辑和数据解耦。模式中的三个组成部分是: 1. **Model(模型)**:模型包含了应用程序的核心功能。它封装了数据和业务逻辑,负责处理数据的读写...