文章教程

18.1ASP.NETMVC简介

8/31/2020 9:52:39 PM 人评论 次浏览

18.1 ASP.NET MVC简介

脱离任何一种开发语言来讲,MVC是一个纯粹的设计模式、一种思想,也算是一种程序模块职责的划分方式。ASP.NET MVC是微软官方提供的依据MVC模式编写的应用于ASP.NET Web应用程序的一个框架。

18.1.1 ASP.NET Web开发中存在的不足

在MVC设计引进到ASP.NET Web应用开发中之前,编程人员都在采用Web表单的方式来开发应用程序。Web表单的指导思想是把Windows桌面应用中的表单模型引入到Web应用程序的开发中。这种模型很快就吸引了大批的传统Windows桌面应用开发人员,特别是以前的VB 6.0开发人员。现在,许多VB 6.0开发者已经转到了ASP.NET Web开发领域,但是他们并没有基本的HTTP与Web基本知识。为了模拟传统型Windows桌面应用程序中的表单开发体验,Web表单引入了事件驱动的方法,而且还引入了Viewstate和Postback等相关概念。最终,Web表单技术彻底地攻克了Web中无状态特征这个难关。

但正是基于这种指导思想,Web表单技术存在以下无法避免的缺点:

● Viewstate和Postback提高了Web应用程序开发的复杂性。例如,即使一些非常简单的Web页面也有可能产生大于100KB的Viewstate,这当然会在某些情况下严重影响系统的性能。

● 开发人员无法控制Web表单生成的HTML。

● ASP.NET服务器控件生成的HTML既混杂有内联方式也包含不符合标准的过时标签。

● 与JavaScript框架的集成比较困难,这主要是因为生成的HTML命名惯例所造成的。

● Web表单相应的页面生命周期太复杂了,在整个ASP.NET框架中所有内容都是紧耦合型的,并且仅使用一个类来负责显示输出和处理用户输入。因而,单元测试几乎是一项不可能完成的任务。

● 随着Web应用越来越复杂化,不容易测试也越来越成为实际应用开发中的一个棘手的问题。

18.1.2 什么是MVC

MVC英文为Model-View-Controller,即把一个Web应用的输入、处理、输出流程按照Model、View、Controller的方式进行分离,这样一个应用被分成三个层——模型层、视图层、控制层。

视图(View)代表用户交互界面,对于Web应用来说,可以概括为HTML界面,但有可能为XHTML、XML和Applet。随着应用的复杂性和规模性,界面的处理也变得具有挑战性。一个应用可能有很多不同的视图,MVC设计模式对于视图的处理仅限于视图上数据的采集和处理,以及用户的请求,而不包括在视图上的业务流程的处理。业务流程的处理交予模型(Model)处理。比如一个查询的视图只接受来自模型的数据并显示给用户,以及将用户界面的输入数据和请求传递给控制和模型。

模型(Model)就是业务流程/状态的处理以及业务规则的制定。业务流程的处理过程对其他层来说是黑箱操作,模型接受视图请求的数据,并返回最终的处理结果。业务模型的设计可以说是MVC最主要的核心。目前流行的EJB模型就是一个典型的应用例子,它从应用技术实现的角度对模型做了进一步的划分,以便充分利用现有的组件,但它不能作为应用设计模型的框架。它仅仅告诉按这种模型设计就可以利用某些技术组件,从而减少了技术上的困难。对一个开发者来说,就可以专注于业务模型的设计。MVC设计模式说明,把应用的模型按一定的规则抽取出来,抽取的层次很重要,这也是判断开发人员是否优秀的依据。抽象与具体不能隔得太远,也不能太近。MVC并没有提供模型的设计方法,而只负责组织管理这些模型,以便于模型的重构和提高重用性。可以用对象编程来做比喻,MVC定义了一个顶级类,通知它的子类能做这些,但没办法去限制子类仅仅只能够做这些,这点对编程的开发人员非常重要。

业务模型还有很重要的一点就是数据模型。数据模型主要指实体对象的数据保存(持续化)。比如将一张订单保存到数据库,从数据库获取订单。可以将这个模型单独列出,所有有关数据库的操作只限制在该模型中。

控制(Controller)可以理解为从用户接收请求,将模型与视图匹配在一起,共同完成用户的请求。划分控制层的作用也很明显,它就是一个分发器,选择什么样的模型,选择什么样的视图,可以完成什么样的用户请求。控制层并不做任何的数据处理。例如,用户单击一个链接,控制层接受请求后,并不处理业务信息,它只把用户的信息传递给模型,告诉模型做什么,选择符合要求的视图返回给用户。因此,一个模型可能对应多个视图,一个视图可能对应多个模型。

模型、视图与控制器的分离,使得一个模型可以具有多个显示视图。如果用户通过某个视图的控制器改变了模型的数据,所有其他依赖于这些数据的视图都应反应到这些变化。因此,无论何时发生了何种数据变化,控制器都会将变化通知所有的视图,导致显示的更新。这实际上是一种模型的变化-传播机制。模型、视图、控制器三者之间的关系和各自的主要功能如图18-1所示。

alt

图18-1 MVC组件类型的关系和功能

MVC设计模式具有如下的优点:

● 可以为一个模型在运行时同时建立和使用多个视图。变化-传播机制可以确保所有相关的视图及时得到模型数据变化,从而使所有关联的视图和控制器做到行为同步。

● 视图与控制器的可接插性,允许更换视图和控制器对象,而且可以根据需求动态地打开或关闭、甚至在运行期间进行对象替换。

● 模型的可移植性。因为模型是独立于视图的,所以可以把一个模型独立地移植到新的平台工作。需要做的只是在新平台上对视图和控制器进行新的修改。

● 潜在的框架结构。可以基于此模型建立应用程序框架,不仅仅用在设计界面的设计中。

18.1.3 ASP.NET MVC

ASP.NET MVC框架为创建基于MVC设计模式的Web应用程序提供了设计框架和技术基础。它是一个轻量级的、高度可测试的演示框架,并且它结合了现有的ASP.NET特性(如母版页等)。MVC框架被定义在Sytem.Web.Mvc命名空间,并且是被Sytem.Web命名空间所支持的。

ASP.NET MVC框架具有如下一些特性:

● ASP.NET MVC框架深度整合许多用户熟悉的平台特性,如运行时、身份验证、安全性、缓存和配置特性等。

● 整个架构是基于标准组件的,所以开发人员可以根据自己的需要分解或替换每个组件。

● ASP.NET MVC框架使用用户熟悉的ASPX和ASCX文件进行开发,然后在运行时生成HTML的方式,并且在Vistual Studio 2010中支持母版嵌套的功能。

● 在这个框架中,URL将不再映射到ASPX文件,而是映射到一些控制类(controller classes)。所谓控制类,是一些不包含UI组件的标准类。

● ASP.NET MVC框架实现了System.Web.IHttpRequest和IHttpResponse接口,这使得单元测试能力得到了增强。

● 在进行测试时,不必再通过Web请求,单元测试可以撇开控制器而直接进行。

● 可以在没有ASP.NET运行环境的机器上进行单元测试。

ASP.NET MVC架构能够简化ASP.NET Web表单方案编程中存在的复杂部分,但是在威力与灵活性方面将一点也不会逊色于后者。ASP.NET MVC架构要实现的在Web应用程序开发中引入模型-视图-控制器(即Model-View-Controller)UI模式,此模式将有助于开发人员最大限度地以松耦合方式开发自己的程序。MVC模式把应用程序分成三个部分——模型部分,视图部分以及控制器部分。

● 视图部分:负责生成应用程序的用户接口;也就是说,它仅仅是填充有自控制器部分传递而来的应用程序数据的HTML模板。

● 模型部分:负责实现应用程序的数据逻辑,它所描述的是应用程序(它使用视图部分来生成相应的用户接口部分)的业务对象。

● 控制器部分:对应一组处理函数,由控制器来响应用户的输入与交互情况。也就是说,Web请求都将由控制器来处理,控制器会决定使用哪些模型以及生成哪些视图。

MVC模型将使用其特定的控制器动作(Action)来代替Web表单事件。因此,使用MVC模型的主要优点在于,它能够更清晰地分离关注点,更便于进行单元测试,从而能够更好地控制URL和HTML内容。值得注意的是,MVC模型不使用Viewstate、Postback、服务器控件以及基于服务器技术的表单,因而能够使开发人员全面地控制视图部分所生成的HTML内容。MVC模型使用了基于REST(Representational state transfer)的URL来取代Web表单模型中所使用的文件名扩展方法,从而可以构造出更为符合搜索引擎优化(SEO)标准的URL。

微软公司的ASP.NET在最开始的几个版中并没有提供支持MVC设计模式的框架,但是为了满足市场的需要和广大ASP.NET开发人员的要求,终于在2008年3月,微软发布了ASP.NET MVC预览版2,在这个预览版中,提供了MVC routing,并对测试功能进行了改进。另外,它还提供了Vistual Studio 2008开发环境中第一个支持MVC的模板,而且对动态数据进行了改进。这个版本才是真正意义上的ASP.NET MVC框架。此后,这个框架经过不断更新,目前集成在Vistual Studio 2012开发环境中的是ASP.NET MVC 4正式版。

教程类别