《MVC在Web系统中的模式及其应用6138.docx》由会员分享,可在线阅读,更多相关《MVC在Web系统中的模式及其应用6138.docx(14页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、MVC在Webb系统中的模式式与应用面向对象的设计计模式是经验验的总结,MVC思想是原先先用于构建用用户界面的。这这篇文章主要要论述了如何何在新的Web应用领域中中使用设计模模式和MVC架构。文章章首先介绍了了设计模式的的概念和特点点,以及MVC架构的设计计思想,并分分析了MVC架构中包含含的几种主要要的模式。然然后根据Web应用系统的的特点,就如如何应用模式式和MVC架构提出了了一些设计思思路。 1. 引言1.1 设计模式面向对象象技术的出现现和应用大大大提高了软件件的重用性和和软件的质量量。面向对象象的编程也比比以往的各种种编程模式要要简单和高效效,但是面向向对象的设计计方法要比以以往的设
2、计方方法要复杂和和有技巧得多多,一个良好好的设计应该该既具有对问问题的针对性性,也充分考考虑到对将来来问题和需求求有足够的通通用性。在过过去的十几年年中,人们在在对面向对象象技术的研究究探索和实际际应用中针对对某些问题创创造了一些良良好的解决方方案,即所谓的面面向对象的设设计模式。面面向对象技术术的目的之一一就是提高软软件的重用性性,而对设计计模式、设计计方案的重用用则从更深的的层次上体现现了重用的意意义和本质。人们对设计模式有很多定义,其中被引用的最多是Christopher Alexander的设计模式的定义:每一个设计模式是一个三方的规则,它表达了一个上下文环境(Context),一个问
3、题和一个解决方案。设计模式一般有如下几个基本要素:模式名称,问题,目的,解决方案,效果,样例代码和相关设计模式。设计模式的分类有好几种,可以根据其目的分为创建型(Creational),结构型(Structural)和行为型(Behavioral)三种。创建型模式主要是用来创建对象,结构型模式主要是处理类或对象的组合,行为型模式则主要用来描述对类或对象怎样交互和怎样分配职责。也可以根据范围将设计模式分为类模式和对象模式,类模式处理类和子类之间的关系,这些关系通过继承建立,在编译时刻就被确定下来,是属于静态的。对象模式是处理对象间的关系,这些关系在运行时刻变化,更具动态性。 模式的特点:是通过经
4、验获取的,以某种结构化的格式书写下来,避免了遇到相同的问题重头设计,存在于不同的抽象层,在不断完善的,是可重用的人工产物,使设计和最好的练习交互,以被组合起来解决更大的问题。 1.2 MVCC架构MVC最初是在Smallltalk-80中被用来构建用户界面的。M代表模型Model, V代表视图 View, C代表 控制器Contrrollerr。MVC的目的是增增加代码的重重用率,减少少数据表达,数数据描述和应应用操作的耦耦合度。 同时也使得得软件可维护护性,可修复复性,可扩展展性,灵活性性以及封装性性大大提高。单用户的应用通常是以事件驱动的用户界面为组织结构的。开发人员用一个界面工具画了一个
5、用户接口界面,然后编写代码根据用户输入去执行相应的动作,许多交互式的开发环境鼓励这么做,因为它强调先有界面然后再有功能。一些软件设计模式策略是这样的,然后经常将固定后的代码融入最后的系统当中。导致的结果就是,程序组织围绕用户界面元素和用户在那些界面元素上的动作,数据的存储,应用的功能以及用来显示的代码都杂乱无章的缠绕在一起。在单用户的系统里代码结构是可以这样的,因为系统需求不会频繁变化。但是对一个大的系统如大型Web系统,或电子商务系统来说就不太适用了。通过把数据模式从各种可以被存取和控制的数据中分离出来可以改善分布式系统的设计。MVC设计模式由三部分组成。模型是应用对象,没有用户界面。视图表
6、示它在屏幕上的显示,代表流向用户的数据。控制器定义用户界面对用户输入的响应方式,负责把用户的动作转成针对Model的操作。Model 通过更新View的数据来反映数据的变化。三者关系如图: 对MVC关系图的理解图2 MVC的分工与协作2. MVC中的设计模式一个以MVC为架构的系统包含了很多的设计模式,但是与MVC最为密切相关的是下面三种模式:Observer, Composite和Strategy。2.1 Observer模式MVC通过使用定购/通知的方式分离了Model和View。View要保证自己显示能正确地反映出Model的内容和状态。一旦Model的内容发生变化,必须有一个机制来使得
7、Model能够通知相关的View,使得相关的View可以在适当的时机刷新数据。这个设计还可以解决更一般的问题,将对象分离,使得一个对象的改变能够影响到另一些对象,而这个对象并不知道那些被影响的对象的细节。这就是被描述为Observer的设计模式。 模式类型:Observer模式是对象型模式,同时它也是行为型模式。模式目的:定义对象间的一对多的依赖关系,当一个对象的值或状态发生改变时,所有与它有依赖关系的对象都得到通知并自动更新。某一数据可能有多种显示方式,并且可能同时以不同的方式显示(如图2)。当通过某一种方式改变了数据,那么其他的显示都应该能立即知道数据的改变和做相应的调整。模式结构:图 3
8、. Observer模式的结构图效果:1. 抽象耦合。目标对象只知道它有一些观察者,每个观察者都符合抽象的Observer类的简单接口,并不知道它们具体属于哪个类。这样使得目标和观察者之间的耦合最小且抽象。2. 支持广播通信。目标发送通知不用指定观察者,如何处理通知由观察者决定。3. 可能的意外更新。要处理好更新逻辑,避免错误更新。2.2 Commpositte模式MVC的一个重要要特征就是View可以嵌套。嵌嵌套的组合视视图可用于任任何视图可用用的地方,而而且可以管理理嵌套视图。这这种思想反映映出将组合的的视图与其组组件平等对待待的设计。这这种设计思想想在面向对象象领域内被描描述成为Comp
9、oosite的设计模式式。模式类型型:Compoosite模式是对象象型模式,同同时它也是结结构型模式。模式目的:将对象组合成树形结构以表示部分-整体层次结构。Composite使组合对象的使用和单个对象的使用具有一致性。模式结构:图4. Composite模式的结构图效果:1. 定义了包含简单对象和组合对象的类层次结构。简单对象可以被组合到复杂对象中,而组合的对象可以再被组合。这样客户端代码中用到简单对象的地方都可以使用组合对象。2. 简化客户端代码。客户端不用知道某对象是简单对象还是组合对象,可以以一致的方式使用这些对象。3. 更容易增加新类型的组件。新的组件可以方便地加入已有组合对象中不
10、用改变客户端代码。2.3 Strrategyy模式MVC的另一重要要特征是可以以在不改变View的情况下改改变View对用户输入入的响应方式式。这对一个个经常需要变变更响应逻辑辑的系统来说说是非常重要要的。MVC把响应逻辑辑封装在Contrrollerr中。有一个Contrrollerr的类层次结结构,可以方方便地对原有有Contrrollerr做适当改变变,创建新的的Contrrollerr。View使用Contrrollerr子类的实例例来实现一个个特定的响应应策略。要实实现不同的响响应策略,只只要用不同种类类的Contrrollerr实例替换即即可。还可以以在运行时刻刻通过改变View的
11、Contrrollerr来改变View对用户输入入的响应策略略。这种View-CControoller的关系是被被描述为Strattegy的设计模式式的一个例子子。模式类型型:Strattegy模式是对象象型模式,同同时它也是行行为型模式。模式目的:定义一系列的算法,并且把它们封装起来,使它们可以互相替换,使得算法可以独立于使用它的客户端而变化。 模式结构:图5. Strrategyy模式的结构图图效果:1. SStrateegy类层次为Conteext定义了可重重用的相关算算法或行为。2. 替代继承的方法。如果直接继承Context,给以不同的行为,会将行为加到Context中,从而将算法的
12、实现与Context混合起来,使Context难以理解,维护和扩展,而且不能动态地改变算法。将算法封装在独立的Strategy类,可以使得算法独立于Context改变,容易切换扩展。3. 可以提供相同行为的不同实现。4. 客户端必须了解Strategy之间有何不同。5. Context和Strategy之间的通信开销。6. 增加了对象的数目。3. MVC在在 Web系统中的应应用现在的一一些基于Web的分布式系系统如B2B电子商务系系统,就适合合采用MVC架构。通过分分析,从高层层次的角度可可以将一个应应用的对象分分为三类。一一类就是负责责显示的对象象,一类对象象包含商业规规则和数据,还还有一
13、类就是是接收请求,控控制商业对象象去完成请求求。这些应用用的显示是经经常需要变换换的,如网页页的风格,色色调,还有需需要显示的内内容,内容的的显示方式等等。而商业规规则和数据是是相对要稳定定的。因此,表表示显示的对对象View经常需要变变化的,表示示商业规则和和数据的对象象Model要相对稳定,而而表示控制的的Contrrollerr则最稳定。通通常当系统发发布后,View对象是由美美工,HTML/JSP设计人员或或者系统管理理员来负责管管理的。Contrrollerr对象由应用用开发人员开开发实施,商商业规则对象象和商业数据据对象则由开开发人员,领领域专家和数数据库管理员员共同完成的的。显示
14、逻辑辑在Web层或客户端端控制,可以以是Servllet 或JSP,动态地生生成Html。一般来说说采用JSP要比采用Servllet要好。JSP更好地将代代码与Html部分分开,有有利于页面设设计人员和代代码开发人员员的分离,提提高效率。同同时JSP可以完成所所有Servleet完成的功能能,实际上JSP最终也转换换成一个Servllet。与控制有有关的对象存存在于系统的的每一个层次次,协调跨层层动作。包含含商业规则和和数据的对象象存在于EJB层(以EJB为中心的模模式)或Web层(以Web为中心的模模式)。3.1 Vieew在Web系统中的应应用View代表系统的的显示,它完完全存在于We
15、b层。一般由JSP, Java Bean和Custoom Tag组成。JSP可以动态生生成网页内容容,Customm Tag 更方便了使使用Java Bean,而且它可可以封装显示示逻辑,更有有利于于模块块化和重用。一一些设计良好好的Customm Tag可以在多个JSP甚至可以在在不同的系统统里重复使用用。Java Bean用来控制JSP和Model对象。JSP通过Java Bean 来读取Model对象中的数数据,Model和Contrrollerr对象则负责责对Java Bean的数据更新新。一般来说说,可以先要要设计出所有有可能出现的的屏幕,即用用户使用系统统时可以看到到的所有内容容。
16、然后根据据这些内容,找找出公共部分分,静态部分分和动态变化化部分。可以以考虑使用模模板方法,把把公用的内容容单独生成JSP,需要变化化的也各自生生成Html或JSP, 由一个模板JSP, 把这些不同同部分动态地地引入(incluude方法)。还还有一个要考考虑的问题就就是屏幕的选选择问题,当当处理完用户户请求,模板板被自动调用用来显示,这这个显示一定定要知道用户户关心的屏幕幕是有哪些部部分组成。所所以可以考虑虑把所有屏幕幕的定义放在在一个集中的的文件里,如如一个java文件或文本本文件。由于于考虑到屏幕幕定义文件将将来的变更可可能性,最好好使用文本文文件如一个XML文件,这样样将来更改不不用重
17、新编译译。可以根据据用户输入的的URL和参数可以以映射到某一一个结果屏幕幕,当然有可可能还要根据据动作的执行行结果选择不不同的结果屏屏幕内容。所所以需要一个个请求与资源源的匹配文件件(XML),如果一一个URL请求有几种不不同结果,则则要在该文件件中指明是否否需要流控制制(一种contrrollerr对象)以及及不同流向的的对应屏幕。3.2 Model在Web系统中的应用Model对象代表了商业规则和商业数据,存在于EJB层和Web层。在J2EE的规范中,系统有些数据需要存储于数据库中,如用户的账号信息(account model),公司的数据(company model)等,也有一些不需要记
18、录在数据库里的,如某用户浏览的当前产品目录(catalog model),他的购物内容(shopping cart model)等。这些model数据存在于哪一层要根据它们的生命周期和范围来决定。在Web层有HttpSession和ServletContext及Java Bean对象来存储数据,在EJB层则有EJB来存储数据和逻辑。Web层的Java Bean的model对象存储了EJB层model对象的数据的拷贝。因为EJB层有很多不同的model对象,所以Web层可以通过一个ModelManager来控制EJB层的各model对象,在ModelManger中可以封装使用后台model对象的
19、方法。在EJB层把所有的数据和规则都模式化为EJB也是不恰当的。如可以把存取数据库的对象模式化为DAO对象。DAO中可以封装与具体数据库的交互细节,如可以读写不同的表,多个数据库,甚至多种数据库。如定单的model对象可以是一个OrderDAO, 它可能要同时处理Order表,OrderStatus表和OrderItemLines表。还有可以考虑使用Value对象。一个Value 对象可以封装远程对象,因为每一个读远程对象的属性都可能是一个远程过程调用,都会耗费网络资源。可以在EJB的远程对象中使用Value对象. 在远程对象中一次性得到Value对象来得到所有属性的值。3.3 Conntro
20、lller在Web系统中的应应用Conttrolleer对象协调Model与View,把用户请请求翻译成系系统识别的事事件。在Web层,一般有有一个MainSServleet(或Main.jsp),接收所有有请求,它可可以调用屏幕幕流管理器(ScreeenFlowwMangeer)决定下一一个屏幕。一一般还有一个个请求处理器器RequeestProocessoor,包含所有有请求都需要要做的处理逻逻辑,如把请请求翻译成系系统事件(RequeestToEEvent)。请求处处理器通常还还包含一个代代理对象ClienntConttrolWeebImpll,它是EJB层的逻辑处处理的在Web层的代理
21、。在在EJB层,有一个ClienntConttrolleer提供Web 层对EJB层的只读访访问。还有一一个StateeMachiine用来建立和和删除ejb,处理Web层送来的事事件。Conntrolller还有一个重重要的功能就就是同步View和Model的数据。在ModellMangeer中包含一个ModellUpdatteMangger,它把系统统事件转换为为一个Model的集合,即即所有需要同同步的Model,然后通知Listeeners去做同步操操作。4. 结束语近近年来随着互互联网技术的的发展和新的的商业模式的的出现,必然然会出现大量量基于Web的应用系统统。对于如何何设计这些系系统的体系结结构,也逐渐渐有了一些统统一的认识,最最主要的是的的就是其体系系结构要合理理,开放。需需求永远会比比技术和设计计思想发展快快,要使将来来系统的升级级所付出的代代价最小,研研究软件系统统的体系结构构还是非常很很用和有必要要的。