admin 管理员组

文章数量: 887044


2024年1月12日发(作者:prologue什么意思)

MVC在Web系统中的模式及其应用

MVC在Web系统中的模式与应用

面向对象的设计模式是经验的总结,MVC思想是原先用于构建用户界面的。这篇文章要素论述了如何在新的Web应用 领域中使用设计模式与MVC架构。文章首先介绍了设计模式的概念与特点,与MVC架构的设计思想,并分析/MVC

架构中包含的几种要案的模式。然后根据Web应用系统的特点,就如何应用模式与MVC架构提出了 •些设计思路。

1 .引言

1.1 设计模式

面向对象技术的出现与应用大大提高了软件的重用性与软件的质量。面向对象的编程也比以往的各类编程模式要简单与 高效,但是面向对象的设计方法要比以往的设计方法要复杂与有技巧得多,一个良好的设计应该既具有对问题的针对性, 也充分考虑到对将来问题与需求有足够的通用性。在过去的十儿年中,人们在对面向对象技术的研究探索与实际应用中 针对某些问题制造了 •些良好的解决方案,即所谓的面向对象的设计模式。面向对象技术的目的之•就是提高软件的重用 性,而对设计模式、设计方案的重用则从更深的层次上表达了重用的意义与本质。

人们对设计模式仃很多定义,其中被引用的最多是ChriSt。PherAIeXander的设计模式的定义:每 个设计模式是•个三 方的规则,它表达了 个上下文环境(Context) ,

•个问题与•个解决方案。设计模式通常有如下几个基本要素:模式 名称,问题,目的,解决方案,效果,样例代码与有关设计模式。

设计模式的分类石好儿种,能够根据其目的分为创建型(CreatiOnaI),结构型(StruCtUraI)与行为里(BehaViOraI);种。创 建型模式要素是用来创建对象,结构型模式要紧是处理类或者对象的组合,行为型模式则要紧用来描述对类或者对象如 何交互与如何分配职货。也能够根据范阳将设计模式分为类模式与对象模式,类模式处理类与子类之间的关系,这些关 系通过维承建立,在编译时刻就被确定下来,是属于静态的。对象模式是处理对象间的关系,这些关系在运行时刻变化, 更具动态性。

模式的特点:是通过经验获取的,以某种结构化的格式书写下来,避免了遇到相同的问题重头设计,存在于不一致的抽 象层,在不断完善的,是可重用的人工产物,使设计与最好的练习交互,以被组合起来解决更大的问题。

1.2 MVC架构

MVC最初是在SmaIItak80中被用来构建用户界面的.M代表模型ModeLV代表视图View, C代表操纵器ControIler。

MVC的Fl的是增加代码的全用率,减少数据表达,数据描述与应用操作的耦合度。同时也使得软件可保护性,可修复 性,可扩展性,灵活性与封装性大大提面。

单用户的应用通常是以事件驱动的用户界面为组织结构的。开发人员用一个界面工具画了一个用户接口界面,然后编写 代码根据用户输入去执行相应的动作,许多交互式的开发环境鼓励这么做,由于它强调先有界面然后再有功能。一些软 件设计模式策略是这样的,然后经常将固定后的代码融入鼓后的系统当中。导致的结果就是,程序组织围绕用户界面元 素与用户在那些界面元素上的动作,数据的存储,应用的功能与用来显示的代码都杂乱无章的缠绕在一起。在单用户的 系统里.代码结构是能够这样的,由于系统需求不可能频繁变化。但是对一个大的系统如大型Web系统,或者电子商务系

统来说就不太适用r。

通过把数据模式从各类能够被存取与操纵的数据中分离出来能够改善分布式系统的设计,MVC设计模式由:.部分构成.

模型是应用对象,没有用户界面。视图表示它在屏幕上的显示,代表流向用户的数据.操纵器定义用户界面对用户输入 的响应方式,负货把用户的动作转成针对Model的操作.

Model通过更新VieW的数据来反映数据的变化.

-:者关系如图:

图L MVC关系图

时MVC关系图的懂得

模型M

视图V

控制器C

分工

抽象系统应用的功能

封装系统的状态

提供使用系统功能的方法和路径

管理数据的存储和一致性

当数据发生变化时通知相关部分

抽象数据表达

表示针对用户的数据

维护与Model数据的一

致性

抽象用户和系统的事

件的语意映射

把用户输入翻译为系

统事件

根据用户的输入和上

下文情况选择合适的

显示数据

协作

当地改变系统数据时通知View

能够被View检索数据

提供对Controller的操作途径

把Model表征给用户

当数据被相关Model改

变时更新表示的数据

把用户输入提交给

Controller

把用尸输入转成对

Model的系统行为

根据用户输入和

Model的动作结果选

择合适的View

图2 MVC的分工与协作

2 . MVC中的设计模式

一个以MVC为架构的系统包含j'很多的设计模式,但是与MVC最为密切有关的是下面:种模式:ObSerVer,Composite

Strategy.

2.1 Observer 模式

MVC通过使用定购/通知的方式分离Γ Model

lJ View.. VieW要保证自己显示能正确地反映出Model的内容与状态。

旦Model的内容发生变化,务必有一个机制来使得Model能够通知有关的View,使得有关的VieW能够在适当的时机刷 新数据.这个设计还能够解决更通常的问题,将对象分离,使得一个对象的改变能够影响到另一些对象,而这个对象并 不明白那些被影响的对象的细节。这就是被描述为ObSerVer的设计模式。

模式类型:ObSerVer模式是对象型模式,同时它也是行为型模式.

模式目的:定义对象间的一对多的依靠关系,当一个对象的值或者状态发生改变时,所有与它有依毒关系的对象都得到 通知并自动更新.某一数据可能有多种显示方式,同时可能同时以不一致的方式显示(如图2)。当通过某一种方式改 变/数据,那么其他的显示都应该能立即明白数据的改变与做相应的调整.

模式结构:

图3. Observer模式的结构图

效果:

1

.抽象耦合.目标对象只明白它有一些观察者,每个观察者都符合抽象的ObSerVer类的简单接口,并不明白它们具体 属丁哪个类“这样使得目标与观察者之间的耦合最小且抽象.

2

3

.支持广播通信。目标发送通知不用指定观察者,如何处理通知由观察者决定。

.可能的意外更新“要处理好更新逻辑,避免错误更新.

4 .2 Composite 模式

MVC的一个重要特征就是VieW能够嵌套。嵌套的组合视图可用于任何视图可用的地方,而且能够管理嵌套视图。这种 思想反映出将组合的视图与其组件平等对待的设计。这种设冲思想在面向对象领域内被描述成为ComPOSite的设计模式。 模式类型:ComPOSite模式是对象型模式,同时它也是结构型模式。

模式目的:将对象组合成树形结构以表示“部分•整体”层次结构。ComPOSite使组合对象的使用与单个对象的使用具有一 致性。

模式结构:

图4. Composite模式的结构图

效果:

1

.定义了包含简单对象与组合对象的类层次结构。简单对象能够被组合到更杂对歙中,而组合的对象能够再被组合。这 样客户端代码中用到简单对象的地方都能够使用组合对缥。

2

3

.简化客户端代码。客户端不用明白某对象是简单对象还是组合对象,能够以一致的方式使用这些对象。

.更容易增加新类型的组件。新的组件能够方便地加入已有组合对象中不用改变客户端代码。

4 .3 Strategy 模式

MVC的另•重要特征是能够在不改变VieW的情况下改变VieW对用户输入的响应方式。这对•个经常需要变更响应逻

辑的系统来说是非常重要的,MVC把响应逻辑封装在Controller中。有一个ControIler的类层•次结构,能够方便地对原 有COntrOIler做适当改变,创建新的ContrOIler. VieW使用COntroIIer子类的实例来实现一个特定的响应策略.要实现 不一致的响应策略,只要用不一致种类的Controller实例替换即可。还能够在运行时刻通过改变VieVV的Controller来改 变VieW对用户输入的响应策略.这种VieWControIIer的关系是被描述为Strategy的设计模式的一个例子。

模式类型:Strategy模式是对象型模式,同时它也是行为型模式.

模式目的:定义一系列的算法,同时把它们封装起来,使它们能够互相替换,使得算法能够独立于使用它的客户端而变 化。

模式结构:

Context

Strategy

^ContextInterfeceO

^AIgorithmInterfaceO

ConCreteStrategyB

^AIgorithmlnterfaceQ

ConcreteStrategyA

^AIgorithmInterfaceQ

ConcreteStrategyC

^AIgorithmInterfaceO

图5. Strategy模式的结构图

效果:

1 . Strategy类层次为Context定义了可重用的有关算法或者行为。

2 .替代继承的方法。假如直接维承Context,给以不•致的行为,会将行为加到Context 'l>,从而将算法的实现与Context

混合起来,使ConteXt难以懂得,保护与扩展,而且不能动态地改变算法。将算法封装在独立的Strategy类,能够使得 算法独立于COnteXt改变,容易切换扩展。

3

.能够提供相同行为的不•致实现。

4 .客户端务必熟悉Strategy之间有何不一致。

5 . Context

i-i Strategy之间的通信开销。

6 .增加了对象的数目。

3

. MVC在Web系统中的应用

现在的一些基于Web的分布式系统如B2B电子商务系统,就适合使用MVC架构。

通过分析,从高层次的角度能够将一个应用的对象分为三类。一类就是负责显示的对象,一类对象包含商业规则与数据, 还有一类就是接收请求,操纵商业对象去完成请求。这些应用的显示是经常需要变换的,如网页的风格,色调,还有需 要显示的内容,内容的显示方式等。而商业规则与数据是相对要稳固的。因此,表示显示的对象VieW经常需要变化的, 表示商业规则与数据的对象Model要相对稳固,而表示操纵的Controller则最稳固.

通常当系统公布后,VieW对象是由美工,HTML/JSP设计人田或者者系统管理历来负货管理的.ContrOller对象由应用 开发人员开发实施,商业规则对象与商业数据对象则由开发人员,领域专家与数据库管理员共同完成的“显示逻辑在

Web层或者客户端操纵,能够是SeMet或者JSP.动态地生成HtmI.通常来说使用JSP要比使用SerVIet要好。JSP

更好地将代码与Html部分分开,有利T页面设计人员与代码开发人员的分离,提高效率.同时JSP能够完成所有Servlet

完成的功能,实际上JSP最终也转换成一个SerVIet。与操纵有关的对象存在于•系统的每一个场次,协调跨乂动作。包 含商业规则与数据的对象存在于EJB层(以EJB为中心的模式)或者VVeb层(以Web为中心的模式)。

3.3 Controller在Web系统中的应用

ControlIer对象协调ModeI与View,把用户请求翻译成系统识别的事件。在VVeb层,通常有一个MainserVIet(或者

Mainjsp),接收所有请求,它能够调用屏科流管理器(SCreenFIOWManger)决定下一个屏幕.通常还有一个请求处理 器ReqUeStProCeSSor,包含所有请求都需要做的处理逻辑,如把请求Si译成系统事件(ReqUeStToEVent)。请求处理 器通常还包含一个代理对象CIientControiWebImPI,它是EJB层的逻辑处理的在Web层的代理。在EJB层,有一个

Clienteontrogr提供Web层对EJB层的只读访问。还有一个StateMaChine用来建立与删除ejb,处理Web层送来的 事件。

Controller还有一个至要的功能就是同步View

lj Model的数据。在MOdelManger中包含一个ModeIUpdateManger.

它把系统事件转换为一个Model的集合,即所有需要同步的Model,然后通知LiStenerS去做同步操作。

4 .结束语

近年来随着互联网技术的进展与新的商业模式的出现,必定会出现大量基于VVeb的应用系统.关于如何设计这些系统的 体系结构,也逐步有了 •些统一的认识,最要紧的是的就是其体系结构要合理,开放。需求永远会比技术与设计思想进 展快,要使将来系统的升级所付出的代价最小,研究软件系统的体系结构还是非常很用与有必要的“


本文标签: 对象 模式 能够