翻译来源:http://www.codeproject.com/Tips/669195/MVC-Introduction
MVC介绍
在这篇技术文章中,我们将介绍ASP.NET MVC的设计模式。但是在此之前,我们先看一下ASP.NET MVC的发布历史。
图1ASP.NET MVC版本历史
ASP.NET是专门为创建网站而设计的。它就像网页一样是web应用程序开发框架。
MVC框架
MVC不会替代掉网页表单。我们可以用MVC框架也可以使用ASP.NET网页表单的形式来创建我们的网络应用程序。MVC对于基础的ASP.NET网页表单模型来说仅仅是一个可替换的结构。这种设计方式将我们的网站划分为3个层次,这大大加强了我们对我们的网络应用程序的控制力度。
-
Model(模型层):Model象征着业务逻辑和数据。它包含属性和应用程序逻辑。它和数据库进行“交流”—即向数据库获取数据并储存数据。模型层可能是一个LINQ to SQL框架【注1】或者实体框架。
-
View(视图):View代表程序的展示层,它用于为用户提供用户界面。基本上,它是一系列的网页或者用户控件[B1] 。在View上没有对用户操作的处理和输入逻辑—它们是在Controller上进行的。这种分离使得程序更加便于测试。
-
Controller(控制器):Http请求传递到个人的控制器然后控制器调用Model并选择一个View用于展现结果。Controller表现为处于Model和View之间的一个协调者。
正因为MVC被分为3个层次,所以它是一个弱耦合的开发框架。这种弱耦合可以降低网络应用程序的复杂程度并便于维护和提供更好的测试驱动开发,这正是ASP.NET MVC框架的目的之一:提高程序的可测试性。
一个MVC应用程序和web表单有不同的体系、结构和页面处理方式。在一个ASP.NET程序中,request是由ASP.NET处理的,即ASP.NET调用界面、执行事件然后返回response。但是在MVC模式中,我们不得不写Models,创建Views,编写Controllers。在MVC中,requests是由UrlRoutingModule HttpModule类【注2】处理的。这个类转换request,并根据我们提供的配置选择一个路径(我们之后会讨论寻址)。然后request会传递到我们编写的其中一个Controller。然后就轮到Controller通过Module连接数据库并提供response将指定的Views变为用户界面。这样子,我们能完全掌控request和response。所以,在MVC中,没有什么东西能向我们隐藏。在MVC框架中我们不得不写更多的代码毕竟没有什么东西是自动的嘛。
ASP.NETMVC Request 生命周期
MVC使用路径来处理,因此我们不得不使用System.Web.Routing(路径搜索引擎)命名域。正如我们之前讨论的那样,在MVC中,requests是由UrlRoutingModule HttpModule类处理的。UrlRoutingModule接收请求并在RootCollection Table中寻找一个路径。我们使用RegisterRoutes方法(被称为程序启动事件)在Global asax file(全局文件)【注3】中的Collection添加路径。这些路径在程序开始时就被添加到指定的Table中,然后request被映射到其中一个路径并创建了两个对象----RouteData类对象表示路径、RequestContext表示该request的内容。
MVCRouteHandler类处理路径,它会创建一个MVCHandler的实例化对象并将RequesContext传递给处理者(即MVCHandler对象)。该处理程序实际上调用了Controller(我们所编写的用于处理Request的控制器)并运行Controller中的处理方法。
Controller然后使用ControllerActionInvoker【注4】来决定运行哪个Action(在Controller中我们使用Action来处理作为事件的代码)。最后Action类中的方法接收用户的输入并使用View和Model准备一个response。
MVC特性
我们应该用MVC框架来创建我们的网站,理由如下所示: