1.2 什么是ASP.NET MVC?
ASP.NET MVC提供了基于.NET Framework开发Web应用程序另一种选择。最早发布于2007年11月份,现在已经发布了4个版本。发布于2011年1月的ASP.NET MVC 3.0是第一个基于.NET框架 4.0的版本。ASP.NET MVC 4.0可以运行在.NET 4.0和.NET 4.5之上。
MVC是Model-View-Controller的缩写,是Web开发领域非常流行的设计模式。
作为Web窗体的另一个分支技术,ASP.NET MVC采取了不同的构建Web应用程序的方式。这以为你可以不用处理ASPX页面、控件、回发、视图状态(ViewState)和复杂的基于事件的页面生命周期。你只需要定义控制器(Controller)、活动(Action)和视图(View),底层的ASP.NET平台保持不变,像Http处理程序(Http Handler)和Http模块(Http Modules)仍然可用,你甚至可以在一个Web应用程序中混合使用MVC和Web窗体两种技术。ASP.NET MVC和ASP.NET Web Form将在核心ASP.NET Framework之上并肩前行。
ASP.NET Web Pages
你可能在图1.2上发现第三种基于ASP.NET Framework的技术―ASP.NET Web Pages。
ASP.NET Web Pages与ASP.NET MVC3同时发布,作为初学者,如果你想学习ASP.NET的话,可以选择除了Web Forms和MVC的ASP.NET Web Pages技术。它也比较适合开发简单的网站,它的很多技术是和ASP.NET MVC共享的,如果你学习了ASP.NET Web Pages,那么你可以非常轻松的迁移到MVC开发。
你可以用Visual Studio开发ASP.NET Web Pages程序,但微软发布了专门针对它开发的平台:WebMatrix。他没有Visual Studio那些复杂的特性,只提供了Web开发必须的功能。介绍WebMatrix超出了本书的范围,但本书中的一些例子是牵涉到ASP.NET Web Pages的内容的。其中就包括Razor模板引擎,它是ASP.NET MVC中使用C#或VB生成HTML的新方法。
图1.2 不同的ASP.NET技术之间的关系
我们将在本书讲解ASP.NET框架的所有核心特性。以下是你想学到的ASP.NET MVC一些优势:
- 对HTML代码完全控制;
- 对URL完全控制;
- 更好的关注点分离;
- 可扩展性;
- 可测试性;
随着对本书阅读的深入,这些优势将逐个呈现。现在,我们将学习一下ASP.NET MVC框架所依赖的底层模式。为什么选择MVC模式?它来自哪里?
1.2.1 MVC模式
上世纪70年代,MVC模式起源于SmallTalk开发组织,然而却是随着Ruby on Rails(2003年)的出现变得普及开来。
MVC模式有3个组成部分
模型――软件开发围绕的领域。如果正在构建Blog系统,涉及的模型可能是Post和Comment。在一些上下文中,术语Model有可能指代视图特定模型,视图特定模型指只针对用户界面显示目的的领域模型。
视图――模型的呈现,框架通常用视图将内容呈现给浏览器,呈现结果的形式一般是标记语言。比如通过html显示一篇博客的内容。
控制器――是将视图和模型联系在一起,是视图与模型的协调者,主要负责接收客户端输入,操作模型并决定执行哪个Action(是显示一个视图还是跳转到其他页面),在博客系统中,可以通过控制器查找某篇文章的最近回复信息并调用恰当的视图,将之呈现出来。
图1.3展示了视图、模型和控制器之间是如何关联到一起的。
图1.3 MVC组件。
控制器接收用户输入,构建恰当的模型传递给视图。控制器和视图都依赖模型,但模型本身的构建不依赖控制器和视图。
在.NET Framework中,ASP.NET MVC并不是首先实现MVC模式的。受Ruby on Rails的启发,开源框架MonoRail早在2005年就在Web开发中引入了MVC模式。我们现在在ASP.NET MVC中仍能看到它的一些理念和影响。
另外,在.NET平台上,除了ASP.NET MVC和MonoRail,还有一些其他的基于MVC的框架。包括:FubuMvc(http://mvc.fubu-project.org,一个开源的基于约定(Convention)的框架;OpenRasta(http://openrasta.org),一个致力于Web应用程序和Web服务开发的,基于资源和HTTP模块概念的开源项目。
通过引入MVC模式,ASP.NET MVC具有ASP.NET Web Form没有的一些优势。
1.2.2 ASP.NET MVC的改进
作为在.NET平台开发Web应用程序更好的选择,ASP.NET MVC解决了ASP.NET Web Form很多不足之处。
更接近协议
HTTP协议是无状态的,ASP.NET Web Form框架努力隐藏这个HTTP的本质。然而ASP.NET通过引入MVC模式,将一个HTTP请求映射到一个方法调用,具有Web开发背景的程序员通常会非常熟悉这种开发体验。模型也被彻底简化了,脱离了Web Form中基于事件的复杂的页面生命周期,同时对HTTP的抽象也是最小化的。
关注点分离
ASP.NET Web Form中用户界面和代码是紧耦合的。ASP.NET MVC提倡用户界面和代码(用于驱动界面显示)分离的设计。这意味着程序员可以更好的控制和维护应用程序,因为当你改变控制器代码时,不必必须改变用户界面。
增强的可测试性
通过将应用程序逻辑和界面相分离,ASP.NET MVC使得可以很容易独立测试各个组件。可以单独测试控制器类而不必测试实际的用户界面。不像传统的Web Forms,MVC控制器并不依赖于臭名昭著的HttpContext类,而是依赖于一个抽象功能约定,所以这很容易做自动化的单元测试。
迄今为止,你已经知道了ASP.NET MVC的一些优势,接下来我们将简单学习一下该框架的第3个版本相对于老版本有什么新的特性。