浅谈MVC架构设计模式
浅谈MVC架构设计模式
[摘 要 ]本文先 简单介绍 了 MVC设 计模 式的起源 ,而后讨论 了 MVC的三个组成部分(模型 、视 图、控制器 )及其工作 流程 ,并对 MVC架构的优点及不足之处进行了分析 ,最后介绍 了Struts框 架中的MVC实现机制。
[关键词 ]MVC Struts
一 、
MVC模式结构
MVC设计 模式是“Model—View—Controller”的缩 写 ,中文 翻译 为“模式 一视图 一控制器”。MVC设计模式将一个完整的应用分成三个组件 。
下面分别介绍各个组件的定义。
Model(模型 ):该组件代 表应用程序数据和数据的处理以及其他的逻辑 。是对软件所处理问题逻辑 的一种抽象 ,封装 了问题 的核心数据 、逻辑和功能实现,独立于具体 的界面显示以及 I/O操作。在一个 网网应用程序中 ,就是应用服务器程序和数据库。
View(视 图):该组件代表用户看到并 与之交互的界面。视 图向用户展示用户感兴趣 的业务数据 ,并能接 收用户 的输入数据 ,视图可 以向模型查询业务数据 ,视图还能接收模型发 出的业务数据更新事件 ,从而对用户界面进行 同步更新。一般包含用户控制操作和信息显示 。
Controller(控制器 ):该组件代表着处理用户输入 ,并调用模 型和视图来完成用户请求 ,从而保证 了界面与模 型状态的统一。根据应用程序设计的不同,Controller可 以位于客户端也可 以位于服务器端 ,或者两者结合起来。 在实际应用中 ,模 型、视 图、控制器三者既相互独立 又相互关联。
二 、MVC工作流程
MVC的工作流程大致可以分成 以下 四步 :
(1)用 户通过视图向基 于 MVC的应用程序发 出一个请求 。
(2)这个请求会被控制器截获 。控制器充当交通警察的角色 ,会检查用户请求 ,然后调用必要 的业务逻辑 以执行所请求的动作 。
(3)用 户请求的业务逻辑被封装在模 型中。该模 型会执行相应的业务逻辑 ,并返 回数据。模 型执行完相应的请求后 ,把执行权返回给控制器。
(4)控制器调用 相应 的视图来显示模型返 回的数据 ,将 正确 的状态信息显示给用户。
三、MVC优缺点
MVC设计模式在构建 Web应用中具有显 著的优 势 ,可适用 于多用户的 、可扩展的、高交互性 的系统 ,如电子商务平台和 ERP系统等 。它可以很好地表 达用 户与系统 的交互模式 以及整个 系统的程 序架构模式。有如下优点 :
(1)有利于分工部署 ,提高工作效率。使用 MVC设计模式开发应用程序 ,开发人员的分工更加明确 ,负责不同逻辑设计的开发人员就可以
分散关注 ,齐头并进。开发进度就可以迅速提高 。以javaweb开发 为例Java开发人员集中精力于业务逻辑,界面程序员 (HTML和 JSP开发人员 )集中精力于页面表现形式上 。
(2)可以降低层与层之间的依赖 。在 MVC设计模式 中,视图层和业务层相分离,这样就允许更改视图层代码 而不用 重新编译模型和控制器代码同样为模型、控制器和视图有效分离,降低了三者之间的耦 合紧密程度,从而 ,一个应用的业务流程或 者业务规则的改变只需要改动 MVC的模型层即可。
(3)提高可维护性:由于视图层和业务逻辑层有效分离,各部分的 责任划分得很清楚 ,维护人员很容 易了解程序 的结构 ,便于维护工作的进行。
(4)提高了应用程序 的重用性 。对于 同一个Web应用,客户可能会使用多种方式进行访问但是无论通过什么访 问方式应用程序的业务逻辑以及业务流程都是一样 的 ,需要改变 的只是表示层 的具体实现方式。从 而提高代码的利用率 。
(5)有利于软件工程化管理 。由于不 同的层各司其职 ,每一层 不同
的应用具有某些相同的特征 ,有利于通过工程化 、工具化管理程序代码 。虽然 MVC设计模式在面 向对象程序设计中被广泛应用 ,但是该设计模式也存在一些不足之处。MVC的不足 主要体现在以下 2个方面 :
(1)由于开发者利用 MVC模式将 一个应用程序分成了三个组件通 过多产生 一些类 ,来提高程序的可读性与健壮性。所以使用 MVC同时也意味着开发人员将要管理更多的文件。即造成类 的数量及文件数量的增加。
(2)并不适合小型应用程序 的开发设 计。MVC模式的精心设计需
要花费用户一些时间去思考其相对复杂的内部 原理 ,而如何将 MVC运用到用户的应用程序 中还需要花费相当可观的时间。对于一个小型应用程序来说严格遵循 MVC设 计模式 开发 ,使模型视图与控制 器分离 ,反而会增加系统结构和实现的复杂性及一些不必要的工作 ,影响开发效率。
四、举例说明 MVC的具体应用——Struts框架的 MVC实现机制
Struts开发框架是 由 Apache软件基金会开发和管理的 ,它是一个基于 SunJ2EE平台的 MVC框架 。在此 ,不详述 Struts框架的实现细节 , Struts对 Model、View和 Controller都提供 了 对应的实现组件。 模型部分 :Struts为 Model部分提供 了 Action对象 和 ActionForm对 象 ,一般是 采用JavaBean或 EJB组 件设 计和实 现系 统的业 务逻 辑 。 ActionForm封装 了来 自于用户 的表单 信息 。Action从 控制器获取 ActionForm,执行业务逻辑。Action主要有两个作用 :调用相应业务逻辑请 求和传递数据 。控制器部分 :控制器是 Struts框架中的核心组件 ,由 ActionServlet 类实现 。ActionServlet用来接受客户端 的请求 。根据配置文 件 struts—eonfig.xml的配置信息 ,把请求转发给适 当的 Action对象 。AetionServlet包括 一组 基于 配置 的 ActionMapping对 象 。我们 只需要 配置 Action—
Mapping对象 即可完成 URL地址 的映射 及匹配 用户界 面表单 和 Ac—tionForm类的对应关系 。视 图部分 :Struts框架中视 图有多种 表现形式 ,除了 HTML,JSP页面这些常规表现形式 以外 ,Struts还 支持 FreeMarker等其他视图技术 。视图中不包含业 务逻辑 和模型信息 ,只有标签 。Struts提供了 自定义的标签库 (TagLib)。包括 BeanTags,HTML,TTags,TemplateTags,TilesTags,NestedTags。Struts 框架通过这些 自定 义标 签建立 了 View和 Model之间的联系,提高了开 发效率。一个 Struts应用程序 的简要执行流程如下 :
(1)客户端浏览器发 出请求 。
(2)ActionServlet接收传人的客户端请求 ,ActionServlet类会查找在服务器启 动时就加载到 内存 的配置文件 struts—config.xml,根据文件中 的内容来进行路径 与功能的映射查询。
(3)ActionServlet将提交 的 request对象映射到 ActionForm中。
(4)将 ActionForm传递给 Action来进行处理。Action类执行相应的
业务逻辑功能,比如查询与修改数据库 中的数据。
(5)当模型状态改变后 ,ActionServlet选择对应的视图组件来反馈改变后的结果。最终返 回给客户端 。
总结:
由于 MVC模式并不是 十分 简单 ,内部原理 比较复杂,当使用MVC模式时需要精心地设计。MVC模 式分离了程序的表现 、控制和数据 ,具有设计清晰 、易于扩展 、运用可分 布的特点,它可以很好地 表达用户与系统的交互模式以及 整个系统 的程序架构模式。由于MVC模式有众多的优点 ,所 以 MVC模式的适用 范围很广 。尽管 MVC有许多优 点,但它并不是对所有的应用都适用 。对 于小 型应用 使用 MVC会带来额外的工作量 ,并会增加 应用 的复杂性 ,所以 MVC模式并 不适合小型应用程序 。但对于开发业务逻辑复杂的、存在大量用户界面的大型应用系统 ,尽管在最初构建 MVC框架时会花费一定的时间和精力 ,但 MVC模式将会使系统在健壮性 、代码可重用性等方面登上一个新的台阶 ,它会大大提高后期软件开发的效率。因此 ,MVC模式在 当前大 型软件 开发中被广泛应用。
参考文献
[1]张孝祥.深入体验 IavaWeb开发 内幕——核 心基础.电子工业出
版社 .2006.10
[2]粱建武 ,邹锋.JSP程序设计实用教程冲 国水利水电 出版社,2007.
5
[3]龚赤兵:W eb开发新体验:ASP.NET3.5MVC 架构与 实战.电子
工业出版社2009.9
[4]范立锋 ,乔世权 ,程 文彬.JSP程序设计.人 民邮电 出版社 。2009.5
[5]闫术卓,杨强.Struts2技术详解一 基于 WebWork核 心的 MVC 开发与 实践.电子工业出版社 ,2008.6