扫一扫
分享文章到微信
扫一扫
关注官方公众号
至顶头条
在本页阅读全文(共2页)
模型-视图-控制器MVC(Model-View-Controller)设计模式是随着Smalltalk语言的发展而提出的,它是一个著名的用户界面设计架构。其应用架构把应用系统划分为3个相互协调的部分:模型(Model),包含应用程序的核心功能,封装系统的状态;视图(View),是模型的动态表示,并提供用户交互界面;控制器(Controller),接受来自视图的请求,修改模型的状态,同时根据模型状态的变化更新视图。
图1:一个基本的层次划分 |
MVC是分析和设计Web应用程序最常用的模式,它同时也是很多Web应用程序开发框架所依据的架构模式,它为软件的分层及实现提供了一种稳定而成熟的结构方案和开发方法。随着互联网应用的不断发展,很多传统的应用程序被转移到网络平台上运行,Web应用程序也正被用来实现越来越多、越来越复杂的应用逻辑,这些都使其本身也变得越来越复杂而难以控制。
万能JSP方法
早期的开发人员使用一种较为直接的方法来开发B/S结构的Web应用程序,这种方法明显地带有C/S程序开发的特点。他们不仅在视图中实现软件界面逻辑,还在其中实现很多应用逻辑。
以JSP程序开发为例,程序员不仅使用JSP页面进行数据显示和响应用户操作,还在其中处理诸如数据库连接、数据操作、权限控制、程序流转等应用逻辑。
这种开发方式虽然较为直观,但是不同类型的代码混杂在一个页面中,显得零乱而不易维护。这种Web应用程序开发方法没有形成明显的开发框架,常被称为Model1方法,也被戏称为“万能JSP方法”。
MVC模式——Web应用设计的主流
为了能有效的控制开发,MVC模式诞生了,并且成为分析和设计Web应用程序最常用的模式。
通常对于一个应用领域的问题,我们会进行如图1所示的基本层次划分。对于熟悉MVC模式的软件设计师,他们通常会利用一种有效的设计模式来实现此类层次结构,即分别地设计问题域中面向应用的部件和面向数据的部件,并用一个问题语境下的控制器部件来处理它们之间的交互。
这种经典结构给问题的解决提供了一个清晰的层次模型,增加了解决方案的扩展性和维护性,而且在实现上也有很多经验甚至代码可以借鉴,从而也增加了软件的成熟性,并减少了开发的难度。
因此MVC模式成为Web应用程序设计的主流方式,以此模式为基础,出现了很多各具特色的开发框架,其中代表性的有WAF、Struts、WebWork等。这种基于MVC模式的Web应用程序开发方法被统称为Model2方法。
递归MVC应运而生
虽然MVC模式对于较简单的Web应用程序来说,是一个非常行之有效的分析模式和设计方法,但是相对于Web应用程序复杂性的快速增长来说,传统的MVC结构已显得过于单薄和简单,其对应用逻辑容量和扩展性的改善也显得相当有限。问题越来越多地表现在:
1.随着Web应用程序中实现的应用逻辑的增加,依据MVC模式分离出来的Model层、Controller层和View层都已变得更加复杂而难以控制。直接构造这些层次的风险也急剧增加。
2.Controller层中的情况更加糟糕,应用系统的数据逻辑、应用逻辑和显示逻辑混杂在一起管理和实现,模糊了系统的层次结构,这常会使系统变得过于僵硬,由于各层次间的交互方式和过程显得过于随意,程序也比较难以维护。
3.数据的传输路线和控制过程不够清晰,常使各个部件间产生不合理的跨层依赖,程序的整体结构受到很大影响。
4.界面的实现和流转过于依赖控制器,大量功能单一的页面文件造成频繁的流转控制和繁琐的状态控制,这给控制器造成很大的负担,也会严重损害系统的性能和扩展性。
为了解决上述问题,一个在传统MVC结构的基础上递归地应用MVC模式的分析模式被提出。利用MVC模式解决应用程序结构问题的基本思路,去解决MVC结构本身的构造问题。
这种应用方式虽然增加了应用程序结构复杂性,却可以使其基础构造单元的复杂度得以快速地降低,使系统的层次结构显得更加清晰,系统扩展性得到增强,从而为MVC应用程序以更高的效率实现更加复杂的功能打下良好的基础。
从三角形结构到双键结构
MVC在应用过程中,随着应用程序运行环境的变化和采用的编程语言的变化,其应用形态也经历了多次调整和改变。但是利用MVC模式进行软件分析、设计和构造的基本思想并没有改变。
早期的MVC结构的应用形态常呈一种三角形的结构,如图2所示。在这种形态结构中,MVC的各个部分:Model、View、Controller之间都存在着关联或依赖关系。
图2:MVC的三角形结构 |
这是由于当时的应用程序普遍采用Client/Server结构(以下简称C/S结构)进行开发,这种结构中软件系统的View与Model通常以相同的编程语言进行开发,同时它们之间有方便的、基于连接的数据管道进行通讯,因而View中显示和操作的数据可以直接从Model获取,MVC形成的是一种三角形的结构形态。
在随后的发展过程中,基于B/S结构的Web应用程序得到了大量地使用,开发人员不得不舍弃了基于连接的稳定可靠的客户端/服务器通讯方式,代之以基于非连接的Http通讯协议。在这种应用环境中,View和Model通常采用不同的语言进行开发,它们之间的数据交互变得比较不容易实现和控制。
在为了适应这种结构开发而出现的应用程序开发框架中,Controller除了实现传统的功能外,还越来越多地被作为View和Model之间进行交互的数据通道。View和Model之间的直接交互被慢慢地断开,MVC逐渐形成了适应Web应用程序开发的双键形态,如图3所示。
图3:适应Web应用程序的MVC双键形态 |
如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。
现场直击|2021世界人工智能大会
直击5G创新地带,就在2021MWC上海
5G已至 转型当时——服务提供商如何把握转型的绝佳时机
寻找自己的Flag
华为开发者大会2020(Cloud)- 科技行者