Introduction
MVC应该算是一个古老的Design Pattern了,无论是在win form程序还是web程序中,它的应用都是比较广泛的。MVC也是我在学校中学习到的第一个设计模式。终于,可以在ASP.NET中应用了。本文的例子 所用的是ASP.NET MVC Preview 2,可以在这里下载。
Create a new MVC project
菜单File->New Project ->ASP.NET Web MVC Application
新创建的项目是一个完整的可以运行的Sample程序。
新创建的MVC Project和传统的Asp.net web application不同,MVC Project包含有如下四个文件夹:
- Content Folder : 这个文件夹中放一些支持文件,如CSS等。
- Controller Folder :这个文件夹中放所以的Controller文件
- Models folder : 这个文件夹存放所有的data model文件,包括:LINQ to SQL DBML文件,Entity文件
- Views folder : 存放所有的页面文件,包括master文件。Master等需要被共享访问的需要被放在一个Shared子文件夹中。
Advantages of an MVC-Based Web Application
- 把程序分为Model, View和Controller之后,更容易控制程序的复杂性
- 没有了传统的Asp.Net中的viewstate和server端的form,使得开发人员可以实现对页面的完全控制。当然也失去了viewstate和server端form带来的各种好处
- 支持测试驱动开发
Features of the ASP.NET MVC Framework
- 应用程序的业务分离,支持测试驱动开发
- 可扩展和支持插件的Framework。开发人员都可以根据自己的需要修改甚至替换ASP.NET MVC Framework的各个component,也可以以插件的形式开发自己的View Engine,URL Routing Policy等各种component。ASP.NET MVC Framework甚至支持依赖注入(Dependency Injection)和控制反转(Inversion of Control)等容器模式。
- 强大的URL-Mapping功能。使得URL地址更有意义(REST)。URL中不再包括文件扩展名。
-
对很多传统Asp.Net特性的支持。如<%=%>, user control等。
The MVC Framework and Postbacks
Asp.Net MVC 不再使用传统的Asp.Net Web Application的postback模式。取而代之的是,所有的客户端发回服务器端的request都会被映射到某一个controller类中, 这使UI logic和business logic得以分离,从而有助于提高程序的可测试性。
Understanding the MVC Project Execution Process
Request被发回服务器端之后,首先都由UrlRoutingModule对象来解析这个Request,并根据URL找到一个匹配的Router对象,之后由这个Router对象来处理这个Request。 MVC Application的处理流程:
- Initial Request: routers在Global.ascx中被添加到RouteTable中。
- Routing: UrlRoutingModule找到匹配的Router对象,决定使用哪个controller,调用哪个action。
- Map to controller: MvcRouteHandler会尝试通过routedata来创建controller的type name.
- Create Controller
- Execute Controller