维普资讯 http://www.cqvip.com 2006年第1期 大众科技 NO.1,2006 (总第87期) DAZHONG KE J (Cumulatively No.87) 基于WEB环境的MVC设计模式应用 别、国恩 (广东工业大学计算机学院,广东广州 510090) 【摘 要】文章主要论述了如何在新的Web应用领域中使用设计模式和MVC架构,介绍了设MVC架构的设计思想,并分 析了MVC架构中模型、视图、控制器三者的主要关系,并就如何应用MVC架构提出了一些设计思路。 【关键词】设计模式;MVC;架构;WEB 【中图分类号】TP3 【文献标识码1 A 【文章编号】1008—1151 ̄006)01—0080—02 大部分Web应用程序都是用像ASP,PHP这样的过程化 能.如图1所示: 语言来创建的。它们将像数据库查询语句这样的数据层代码 和像HTML这样的表示层代码混在一起。经验比较丰富的开 发者会将数据从表示层分离开来.但这通常不是很容易做到 的.它需要精心的计划和不断的尝试,MVC从根本上强制性 的将它们分开 尽管构造MVC应用程序需要一些额外的工 作.但是它给我们带来的好处是毋庸置疑的。MVC模式在网 站架构中十分常见.它允许我们建立一个三层结构的应用程 式.从代码中分离出有用的层,帮助设计师和开发者协同工作 以及提高我们维护和扩展既有程式的能力。 一、MVC设计模式 田1.—虻芙聚田 许多计算机系统的用途都是从数据存储检索数据并将其 视图和控制器都依赖于模型。但是.模型既不依赖于视 显示给用户.在用户更改数据之后.系统再将更新内容存储到 图.也不依赖于控制器。这是分离的主要优点之一。这样的分 数据存储中 因为关键的信息流发生在数据存储和用户界面 离允许模型在于可视表示功能的情况下建立和测试。在 之间.所以可能倾向于将这两部分绑在一起,以减少编码量并 许多胖客户端应用程序中.视图与控制器的分离是次要的,实 提高应用程序性能。但是。这种方法有一1、问题是:用户界面 际上.许多用户界面框架将角色实现为一个对象。另一方面, 的更改往往比数据存储系统的更改频繁得多。将数据和用户 在Web应用程序中.视图(浏览器)与控制器(处理H11门P请 界面这两部分耦合在一起带来的另一个问题是:业务应用程 求的服务器端组件)的分离是很好定义的。 序往往会并人远不止数据传输功能的其他业务逻辑。如何让 二、MVC在Web系统中的应用 Web应用程序的用户界面功能实现模块化 以便轻松地单独 现在的一些基于Web的分布式系统如B2B电子商务系 修改各个部分?MVC(Model—View-Con Uer1正是这样的模式, 统.就适合采用MVC架构。通过分析,从高层次的角度可以 它实现功能模块和显示模块的分离.使得应用程序更加可维 将一个应用的对象分为三类:一类就是负责显示的对象。一类 护、可扩展、可移植和可复用。对于界面设计可变性的需求, 对象包含商业规则和数据.还有一类就是接收请求,控制商业 MVC把交互系统的组成分解成模型、视图、控制器三种部件。 对象去完成请求。这些应用的显示是经常需要变换的,如网页 视图部件把表示模型数据及逻辑关系和状态的信息以特 的风格、色调.还有需要显示的内容、内容的显示方式等。而商 定形式展示给用户。它从模型获得显示信息.对于相同的信息 业规则和数据是相对要稳定的。因此,表示显示的对象View 可以有多个不同的显示形式或视图 控制器部件是处理用户 经常需要变化的。表示商业规则和数据的对象Model要相对 与软件的交互操作的.其职责是控制提供模型中任何变化的 稳定.而表示控制的Controller则最稳定。 传播.确保用户界面于模型间的对应联系。它接受用户的输 通常当系统发布后.View对象是由美工,HTM SP设计 入.将输入反馈给模型,进而实现对模型的计算控制,是使模 人员或者系统管理员来负责管理的。Controller对象由应用开 型和视图协调工作的部件。模型部件保存由视图显示.由控制 发人员开发实施.商业规则对象和商业数据对象则由开发人 器控制的数据:它封装了问题的核心数据、逻辑和功能的计算 员.领域专家和数据库管理员共同完成的。显示逻辑在Web 关系.它于具体的界面表达和I/O操作。 层或客户端控制.可以是Servlet或JSP。动态地生成HtrIll。一 模型、视图与控制器的分离.使得一个模型可以具有多个 般来说采用JSP要比采用Servlet要好。JSP更好地将代码与 显示视图 如果用户通过某个视图的控制器改变了模型的数 HtrIll部分分开.有利于页面设计人员和代码开发人员的分 据.所有其它依赖于这些数据的视图都应反映到这些变化。因 离.提高效率。同时JSP可以完成所有Servlet完成的功能,实 此.无论何时发生了何种数据变化.控制器都会将变化通知所 际上JSP最终也转换成一个Servlet。与控制有关的对象存在 有的视图.导致显示的更新 这实际上是一种模型的变化一传 于系统的每一个层次.协调跨层动作。包含商业规则和数据的 播机制 模型、视图、控制器三者之间的关系和各自的主要功 对象存在于EJB层(以EJB为中心的模式)或Web层(以 【收稿日期】2005—10—04 【作者简介】孙国恩(1978一),男,河南南阳人,广东海洋大学信息学院助教,硕士,研究方向:管理信息系统。 一80— 维普资讯 http://www.cqvip.com Web为中心的模式)。 (一)View在Web系统中的应用 Vie 代表系统的显示.它完全存在于Web层,一般由 JSP.Java Bean和Custom Tag组成。JSP可以动态生成网页内 容.Custom Tag更方便了使用Java Bean,而且它可以封装显 示逻辑.更有利于于模块化和重用。一些设计良好的Custom Tag可以在多个JSP甚至可以在不同的系统里重复使用。 Java Bean用来控制JSP和Model对象。JSP通过Java Bean来 读取Model对象中的数据.Model和Controller对象则负责对 Java Bean的数据更新。一般来说.可以先要设计出所有可能 出现的屏幕.即用户使用系统时可以看到的所有内容。然后根 据这些内容.找出公共部分.静态部分和动态变化部分。可以 考虑使用模板方法.把公用的内容单独生成JSP.需要变化的 也各自生成Html或JSP.由一个模板JSP.把这些不同部分动 态地引入(incldoe方法)。还有一个要考虑的问题就是屏幕的 选择问题.当处理完用户请求.模板被自动调用来显示.这个 显示一定要知道用户关心的屏幕是有哪些部分组成 所以可 以考虑把所有屏幕的定义放在一个集中的文件里.如一个ia. va文件或文本文件 由于考虑到屏幕定义文件将来的变更可 能性.最好使用文本文件如一个XML文件.这样将来更改不 用重新编译 (二)Model在Web系统中的应用 Model对象代表了商业规则和商业数据.存在于EJB层 和Web层。在J2EE的规范中.系统有些数据需要存储于数据 库中,如用户的账号信息(account mode1).公司的数据(com. panv mode1)等,也有一些不需要记录在数据库里的.如某用户 浏览的当前产品目(catalog mode0.他的购物内容(shopping cart mode1)等。这些model数据存在于哪一层要根据它们的生 命周期和范围来决定 在Web层有HttpSession和Servlet. Context及Java Bean对象来存储数据.在EJB层则有EJB来 存储数据和逻辑。Web层的Java Bean的model对象存储了 日B层model对象的数据的拷贝。因为 B层有很多不同的 model对象,所以Web层可以通过一个ModelManager来控制 EJB层的各model对象,在Mode1Manger中可以封装使用后 台model对象的方法 在EJB层把所有的数据和规则都模式化为EJB也是不 恰当的.如可以把存取数据库的对象模式化为DAO对象 DAO中可以封装与具体数据库的交互细节.如可以读写不同 的表,多个数据库.甚至多种数据库:如定单的model对象可 以是一个OrderDAO.它可能要同时处理Order表.OrderStatus 表和OrderhemIJnes表 (三)Controller在Web系统中的应用 C0ntroller对象协调Model与View.把用户请求翻译成系 统识别的事件 在Web层.一般有一个MainServlet(或Main. jsp).接收所有请求.它可以调用屏幕流管理器决定下一个屏 幕 一般还有一个请求处理器RequestProcessor.包含所有请 求都需要做的处理逻辑.如把请求翻译成系统事件(Request. T0Event)。请求处理器通常还包含一个代理对象ClientCon. tro1Weblmp1.它是EJB层的逻辑处理的在Web层的代理。在 EJB层.有一个ChentController提供Web层对EJB层的只读 访问 还有一个StateMachine用来建立和删除EJB,处理Web 层送来的事件 C0ntroller还有一个重要的功能就是同步View和Model 的数据。在ModelManger中包含一个ModelUpdateManger,它 把系统事件转换为一个Model的集合.即所有需要同步的 Mode1.然后通知Listeners去做同步操作。 三、应用MVC的优点 MVC的优点体现在以下几个方面: 1.可以为一个模型在运行时同时建立和使用多个视图。变 化一传播机制可以确保所有相关的视图及时得到模型数据变 化.从而使所有关联的视图和控制器做到行为同步。 2.视图与控制器的可接插性.允许更换视图和控制器对 象.而且可以根据需求动态的打开或关闭、甚至在运行期间进 行对象替换 3.模型的可移植性。因为模型是于视图的.所以可以 把一个模型地移植到新的平台工作。需要做的只是在新 平台上对视图和控制器进行新的修改 4.潜在的框架结构。可以基于此模型建立应用程序框架. 不仅仅是用在设计界面的设计中 四、结语 与软件所处理问题的内在模型相比较.用户界面是需要 经常发生变化的.采用MVC设计模式可以在满足对界面要 求的同时.使软件的计算模型于界面的构成 也可以基于 此模型建立大型分布式应用程序框架。本文介绍了MVC设 计模式的原理、MVC设计模式三个组成构件(模型部件、视图 部件和控制部件)以及实现基于MVC的应用需要完成的工 作.最后对MVC的优点进行了分析。 【参考文献】 [11-lJ,、卫琴.精通Struts:基于MVC的Java Web设计与开 发[M卜l匕京,电子工业出版社,2004. 一81—