您好, 访客   登录/注册

MVC设计模式的分析与应用

来源:用户上传      作者:

  摘要 本文针对目前J2EE开发中流行的软件架构进行分析与应用,提出了一种层次分离与应用的方法,并且详细的说明了该架构的实现。
  关键词 MVC;SERVLET ;REQUEST
  中图分类号TP312 文献标识码A 文章编号 1674-6708(2010)31-0152-02
  
  0 引言
  MVC架构是“Model-View-Controller” 的缩写,即“模型-视图-控制器”。MVC程序是由这3个部分组成。MVC架构是一个复杂的架构,其设计和实现也是相对复杂的。但是,我们已经设计了功能和安全性很好的设计模式,并且可以把多种设计模式结合在一起,使MVC架构的实现转换为相对较为容易的代码实现。
  1 MVC设计思想
  MVC的思想是把一个应用程序的数据输入、数据处理、结果输出流程按照Model、View、Controller的方式进行有组织的分离,看似分离却又是统一。这样一个应用程序设计被分成3个部分:模型层、视图层、控制层。
  1.1 模型
  模型是应用程序的主体部分。模型表示业务数据和业务逻辑,一个模型能为多个视图提供数据。由于同一个模型可以被多个视图重用,所以提高了应用的可重用性。
  业务模型是MVC最主要的核心。也称企业模型,它为企业提供一个框架结构,以确保企业的应用系统与企业经常改进的业务流程紧密匹配。可以说,也就是说业务建模主要是从业务的角度而非技术角度对企业进行建模。
  1.2 视图
  视图是用户交互界面,对于Web应用程序来说,可以是HTML,JSP等界面。
  随着应用程序的复杂度的提高和规模的扩大,界面的处理也变得非常复杂。应用程序可能有很多不同风格和类型的视图,MVC设计模式对于视图的操作只是数据的采集和处理,以及用户的请求,而不能进行业务流程的处理,也就是带有功能操作的部分交予模型处理。例如一个购物车的视图只接受来自模型的数据并显示给用户,以及将用户界面的输入数据和请求传递给控制和模型。
  1.3 控制
  控制器接受用户的输入并调用模型和视图去完成用户的需求。当Web用户单击Web页面中的提交按钮来发送HTML表单时,控制器接收请求并调用相应的模型组件去处理请求,然后调用相应的视图来显示模型返回的数据。
  控制(Controller)可以理解为从用户接收请求,将模型与视图匹配在一起,共同完成用户的请求。或者简单的理解,就是程序的处理流程由它来控制。
  模型、视图与控制器的分离,使得一个模型可以具有多个显示视图。如果用户通过某个视图的控制器改变了模型的数据,所有其它依赖于这些数据的视图都应反映到这些变化。因此,无论何时发生了何种数据变化,控制器都会将变化通知所有的视图,导致显示的更新。这实际上是一种模型的变化-传播机制。模型、视图、控制器三者之间的关系和各自的主要功能。
  2 MVC设计模式的实现
  Java 平台企业版和其他的各种框架不一样,J2EE为模型对象定义了一个规范。
  在J2EE应用程序中,视图可能由Java Server Page承担。生成视图的代码则可能是一个servlet的一部分,特别是在客户端服务端交互的时候。J2EE应用中,控制器可能是一个servlet,现在一般用Struts实现。模型则是由一个实体Bean来实现。
  3 MVC结构
  3.1 视图
  视图是模型的展现,它提供用户数据的交互。
  在J2EE下,视图的实现很简单。可以像开发HTML界面一样直接在集成开发环境下通过编写JSP页面来完成页面开发本。一个页面由多个子视图组成;子视图可以是最简单JSP页面。
  视图部分大致处理流程如下:首先,定义了页面的布局;页面配置文件定义视图标签的具体内容;然后,由编写代码.这一部分主要定义了WEB页面基类PageBase;页面布局策略类PageLayout,完成页面布局,用于加载用户部件到页面;用户部件基类UserControlBase即用户部件框架,用于动态加载检验部件,以及实现用户部件的个性化。为了实现WEB应用的灵活性,视图部分也用到了许多配置文件例如:置文件有模板配置、页面配置、路径配置、验证配置等。
  3.2 控制器
  控制器接受用户的输入并调用模型和视图去完成用户的需求。所以当单击Web页面中的超链接和发送HTML表单时,控制器本身不输出任何东西和做任何处理。它只是接收请求并决定调用哪个模型构件去处理请求,然后用确定用哪个视图来显示模型处理返回的数据。
  在struts中,基本的控制器组件是ActionServlet类中的实例servelt,实际使用的servlet在配置文件中由一组映射(由ActionMapping类进行描述)进行定义。对于业务逻辑的操作则主要由Action、ActionMapping、ActionForward这几个组件协调完成的,其中Action扮演了真正的业务逻辑的实现者,ActionMapping与ActionForward则指定了不同业务逻辑或流程的运行方向。struts-config.xml 文件配置控制器。现在我们总结MVC的处理过程,首先控制器接收用户的请求,并决定应该调用哪个模型来进行处理,然后模型用业务逻辑来处理用户的请求并返回数据,最后控制器用相应的视图格式化模型返回的数据,并通过表示层呈现给用户。
  现在我们总结MVC的处理过程,首先控制器接收用户的请求,并决定应该调用哪个模型来进行处理,然后模型用业务逻辑来处理用户的请求并返回数据,最后控制器用相应的视图格式化模型返回的数据,并通过表示层呈现给用户。
  3.3 模型
  模型表示企业数据和业务规则。在MVC的3个部件中,模型拥有最多的处理任务。例如:它可能用象EJBs和ColdFusion Components这样的构件对象来处理数据库。被模型返回的数据是中立的,就是说模型与数据格式无关,这样一个模型能为多个视图提供数据。由于应用于模型的代码只需写一次就可以被多个视图重用,所以减少了代码的重复性。
  业务逻辑层在体系架构中的位置很关键,它处于数据访问层与表示层中间,起到了数据交换中承上启下的作用。由于层是一种弱耦合结构,层与层之间的依赖是向下的,底层对于上层而言是“无知”的,改变上层的设计对于其调用的底层而言没有任何影响。如果在分层设计时,遵循了面向接口设计的思想,那么这种向下的依赖也应该是一种弱依赖关系。因而在不改变接口定义的前提下,理想的分层式架构,应该是一个支持可抽取、可替换的“抽屉”式架构。正因为如此,业务逻辑层的设计对于一个支持可扩展的架构尤为关键,因为它扮演了两个不同的角色。对于数据访问层而言,它是调用者;对于表示层而言,它却是被调用者。依赖与被依赖的关系都纠结在业务逻辑层上,如何实现依赖关系的解耦,则是除了实现业务逻辑之外留给设计师的任务。
  
  参考文献
  [1]孙卫琴.精通STRUTS基于MVC的Java Web设计与开发[M].电子工业出版社,2007,3.
  [2]占东明.基于J2EE的MVC设计模式的分析与思考[J].科技广场,2008,3.
  [3]林善茂.MVC设计模式.http://www.csai.cn,2007,12.

转载注明来源:https://www.xzbu.com/8/view-8813306.htm