ASP.NET 3.5MVC概述
为什么使用ASP.NET 3.5 MVC框架
1.1 Web Forms开发难以调试
在传统的ASP.NET应用开发中,微软的开发团队为开发者设计了一个较为完整,基于Web Form的开发环境,使得构建Web应用相对容易,开发人员只需在一个可视化设计中拖放控件,然后在表单中设置相关属性即可;开发人员通过编写代码来响应事件,使得对于程序逻辑的操作也变的直观。
然而在Web Form中,微软构建了一个复杂的引擎,从而给页面的执行过程带来了许多的负面效应。开发者很难了解这背后的HTML是如何运作的,由于编程代码与HTML语言共处于同一页面,所以对于页面设计人员来说非常不友好;同时,如果没有合理控制ViewState的话,很容易得到一个包含大量ViewState的页面,使得该页面的尺寸远远超过所需的内容,最终页面打开的速度异常缓慢;随着Web应用越来越复杂化,不容易测试也越来越成为实际应用开发中的棘手问题。
1.2 ASP.NET 3.5 MVC开发易于测试
ASP.NET 3.5 MVC框架,避免了很多Web Forms所带来的复杂性,没有数据回传,没有在页面中保存视图状态,开发者可以完全掌握页面的呈现全过程,使用模型、视图及控制器将Web应用划分到不同的组件中,有利于开发人员与设计人员的分工,提高开发效率,同时也提高了程序的可维护性和扩展性,特别是有利于Web应用程序的测试,可以比较容易地实施测试驱动开发
1.3 两种WEB开发技术并存
ASP.NET 3.5 MVC框架只是给开发者提供了开发WEB应用程序的一种选择,而绝不是替代传统的Web Forms技术,这两种技术在不同的应用场景中,具有不同的优缺点,开发者需要根据自己的实际情况,选择对应的技术,甚至在同一个项目中混合使用这两个技术
ASP.NET 3.5 MVC框架与Web Forms技术的架构图
ASP.NET 3.5 MVC框架与Web Forms技术是建立在ASP.NET 3.5基础上的两种平行技术,是微软今后同时发展的两种Web开发技术,需要支持的.NET框架为3.5版本,并且还需要安装SP1更新
基本概念
MVC(Model View Controller)模式是一种较为广泛应用的结构设计模式,MVC根据一般应用程序功能分为3个主要部门,分别是模型、视图及控制器。
ASP.NET 3.5 MVC框架基于MVC设计模式,并提供非常方便的测试功能,开发者利用ASP.NET 3.5 MVC框架,借助ASP.NET所提供的母板页及成员管理等技术,可以开发扩展性高、测试容易的Web应用程序,是今后ASP.NET应用的另一个主要方向。
1.1 MVC之间的相互关系
ASP.NET 3.5 MVC中模型、视图及控制器之间的相互关系。
当用户输入URL地址,获得页面的反馈结果,一般需要经过一下5个步骤
(1)当用输入URL地址,发送页面请求时,实际上是向控制器发出相关的命令
(2)控制器接收请求后,向模型请求获得相关的数据
(3)模型将对应的数据返回给控制器
(4)控制器将相关的数据发送到指定的视图
(5)指定的视图呈现被指定的数据
从上述的步骤中可以看出,控制器在其中起着重要的作用,控制器不仅处理用户的请求,还实现与模型之间的交换,对指定的视图发送相关的命令,在实际的ASP.NET 3.5 MVC应用开发中,开发者主要工作是实现控制器的编码
1.2 ASP.NET 3.5 MVC框架的特点
1. 易于单元测试
通过模型\视图和控制器,很好的分离了用户输入逻辑、业务逻辑和界面显示逻辑,因此非常容易实现Web应用程序的单元测试,开发者还可以使用任何与.NET框架兼容的其他测试方法。
2. 容易实施测试驱动开发
开发者可以使用ASP.NET 3.5 MVC框架实施测试驱动开发,事实上,ASP.NET 3.5 MVC框架本身在开发过程中就是采用的测试驱动开发的
3. 可扩展、可替换
ASP.NET 3.5 MVC框架是可扩展的、可被替换的。ASP.NET 3.5 MVC框架中的组件可以被替换或者个性化,例如可以使用其他的视图引擎、URL路由策略等。
4. 支持Web Forms中有关特性
ASP.NET 3.5 MVC中,强大的URL映射组件使得开发者开发极其广泛并且可搜索URL的应用程序;在视图模版中支持各种当前的Web Forms页面(.aspx)、用户控件(.ascx)及母板页(.master),还可以使用嵌套母板页、内联表达式、数据绑定、本地化等。
5. URL被映射到控制器
在传统的ASP.NET应用程序中,URL通常被映射为保存在磁盘上一个文件(例如.aspx文件),而在ASP.NET 3.5MVC应用程序中,Url不再被映射为一个文件,URL首先被映射到一个控制器类中,该控制器处理用户的输入,选择适当的模型,获得相关数据,然后调用视图组件显示指定的数据,并返回到用户界面。