williambirkin

恭喜发财!

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::

基于.NETWeb用框架构建模式

架构与模式小转载MSDN)   20040508

        (注)因为本文写的较早所以本文中的提道具体ASP.NET技术可能会不准确。转载本文的目的在于框架构建模式的思想,而非具体的技术细节。

  本文对应Web表示模式集群,文章的前半部分重笔墨的描述了MVC模式的架构、设计及其ASP.NET实现,而在更加复杂的系中,随后提出了Page Controller(面控制器)Front Controller(前端控制器)MVC实现充,最后,要介Web表示模式集群的另外两个模式:Intercepting Filter(筛选)Page Cache()模式。

 

  体系设计者的第一个作品往往比较简练和干。他知道自己并不了解正在行的工作,因此他小心慎地设计它。在他设计第一个作品,会行多次修色。些会留到下一次使用……第二个系是他曾经设计的最危的系……一般趋势是,在设计第二个系统时,将会使用在第一个作品中被小心置在一的所有思路和修,从而设计过

  Frederick P. Brooks, Jr.表于1972年的The Mythical Man Month(人月神)。

  Web上建立的第一个系简单接在一起的静HTML面,以便在分散的小共享文档。随着用的使用量增加,可响户输入的动态日益普遍。早期的动态页面一般是以通用网接口(CGI)脚本的形式写的。CGI脚本不包含用来确定在响户输时应示什内容的业务逻辑,而且会生成表示HTML。随着复杂逻辑需求的增加,更丰富、更生的表示形式的需求也随之增加。这种增加了的复杂CGI程模型来了挑

  不久,基于面的开发手段(如ASPJSP)出了。些新方法允许开发将脚本直接嵌入到HTML面中,从而化了程模型。当些嵌入的脚本用程序得更复杂时开发希望在级别业务逻辑与表示逻辑应这一要求,随之出了具有帮助器象和代码隐面策略的标记库。然后,又出了提供动态配置站点航和命令度程序的精框架,但所有一切都是以增加复杂代价的。假设现在有大量的Web表示可方案,如何您的用程序选择适当的Web表示设计策略?

是否真的有一个设计策略能所有的情况?很不幸,在设计中,消除多的冗余和度的复杂性是一个争性需求,很真正做到两者之的平衡。您可以从包含嵌入脚本的简单页设计工作,但很快业务逻辑就会不断重在各个文件中,从而致系统难维护展。通该逻辑移到一组协件中,可以消除冗余,但是这样做会增加解决方案的复杂性。另一方面,您的设计工作可以从设计用来提供标记库动态配置和命令度程序的框架入手,可是这样虽然能消除冗余代,但它会大大增加系复杂性,而通常是不必要的。

  而如何考各个方面的需求,提出一个最合适我们应用的Web表示策略呢?需要在复杂解决方案(支持将来可能化的情形)和简单解决方案(足目前的要求)之做出抉,原上适当增加成本是可取的,而多增加成本却是不可取的。那么废话,我就从简单始吧。

MVC(
模型视图控制)

  算机系的用途都是从数据存储检索数据并将其。在用更改数据之后,系再将更新内容存到数据存中。因为关键的信息流生在数据存和用界面之,所以您可能向于将两部分在一起,以减少编码量并提高用程序性能。但是,这种看起来自然而然的方法有一些大问题。一个问题是,用界面的更改往往比数据存的更改繁得多。将数据和用界面两部分耦合在一来的另一个问题是,业务应用程序往往会并入不止数据传输功能的其他业务逻辑。如何Web用程序的用界面功能实现化,以便您可以松地独修改各个部分?

  Model-View-Controller正是这样的模式,它实现功能模示模的分离,使得用程序更加可维护,可展,可移植和可用,它最初是Trygve Reenskaug在二十世七十年代末Smalltalk平台开发的框架[Fowler03],而展到目前止,已形成了一个非常成熟的模式。

MVC
解决方案

  Model-View-Controller (MVC)模式基于用户输入,将域的建模、示和操作分三个独立的[Burbeck92]

  模型:模型用于管理用程序域的行和数据,并响应为获取其状信息(通常来自视图)而出的求,会响更改状的指令(通常来自控制器)。

  视图视图用于管理信息的示。

  控制器:控制器用于解的鼠键盘输入,以通知模型和/视图进行相的更改

1、描述了三个象之

 

视图和控制器都依于模型。但是,模型既不依视图,也不依于控制器。是分离的主要点之一。这样的分离允模型在独立于可表示功能的情况下建立和测试。在多胖客用程序中,视图与控制器的分离是次要的,实际上,多用界面框架将角色实现为一个象。另一方面,在Web用程序中,视图浏览器)与控制器(HTTP求的服器端件)的分离是很好定的。

 

  Model-View-Controller是一个用于将用界面逻辑业务逻辑分离来的基础设计模式。憾的是,此模式的普及致了错误的描述。特是在不同的上下文中,术语“控制器”已用于意指不同的事物。幸运的是,Web用程序的出帮助消除了一些不明确性,因为视图与控制器的分离是如此明

 

MVC

 

  在Application Programming in Smalltalk-80: How to use Model-View-Controller (MVC) [Burbeck92]中,Steve Burbeck描述了MVC的两个型:模型模型

 

  当一个控制器以独占方式操作模型,将使用被模型。控制器将修改模型,然后通知视图:模型已更改,应该进行刷新(见图2)。此情况下的模型完全独立于视图和控制器,意味着模型无法告其状更改。HTTP协议是此方案的示例。浏览器没有从服取异更新的简单方法。浏览视图户输入作出响,但是它不会检测器上的数据更改。当用户显求刷新,才会询问器是否生了更改。


2、被模型的行

 

  当模型更改状而不及控制器,将使用主模型。当其他源正在更改数据并且更改必反映在视图,可能会这种情况。以股票价机的例。您从外部源接收股票数据,并希望当股票数据更改更新视图(例如,价机数据区和警告窗口)。因只有模型检测对其内部状的更改(在些更改),所以模型必通知视图刷新示。

 

  但是,使用MVC模式的一个目的是使模型独立于视图。如果模型必将更改通知视图会重新来您希望避免的依性。幸运的是,Observer模式[Gamma95]提供了这样的机制:提醒其他象注意状的更改,而不会对这象的依性。各个视图实现Observer接口,并向模型注册。模型将跟踪由订阅更改的所有察器成的列表。当模型生改变时,模型将会遍所有已注册的察器,并将更改通知它。此方法通常称-订阅”。模型从不需要有任何视图的特定信息。实际上,在需要将模型更改通知控制器的情况下(例如,启用或禁用菜单选项),控制器必做的全部工作是实现Observer接口并订阅模型更改。于存在视图的情况,定多个主体是有意的,其中个主体都描述了特定型的模型更改。然后,视图都只能订阅视图的更改型。3示了使用Observer的主MVC构,以及察器如何将模型与直接引用视图隔离来。


3、在主模型中使用察器将模型与视图分离

 

  4明当模型生改变时Observer如何通知视图。可惜的是,在一建模(UML)序列中,没有好的方法来演示模型与视图的分离,因为该图表示的是象的例而不是和接口。



基于.NET的Web应用框架构建模式(2)

posted on 2007-01-11 10:21  williambirkin  阅读(386)  评论(0编辑  收藏  举报