ASP.NET MVC 教程(1):ASP.NET MVC介绍

ASP.NET MVC 教程(1):ASP.NET MVC介绍

1.ASP.NET MVC 介绍

.ASP.NET MVC是微软提供的开发MVC网站应用程序的开发框架。.ASP.NET MVC 1.0与2009年3月9号发布。目前最新的正式版本3.0,4.0发布了Beta版本。代码为开源代码,大家可以到官方网站下载最新的版本:

http://www.asp.net/mvc

ASP.NET MVC 框架提供用于创建 Web 应用程序的 ASP.NET Web 窗体模式的替代模式。

ASP.NET MVC 框架是一个可测试性非常高的轻型演示框架,(与基于 Web 窗体的应用程序一样)它集成了现有的 ASP.NET 功能,如母版页和基于成员资格的身份验证。MVC 框架在 System.Web.Mvc 程序集中定义。

2.MVC 设计模式

模型-视图-控制器 (MVC) 体系结构模式将应用程序分成三个主要组件:模型、视图和控制器。

mvc_DesignPattern

MVC 是许多开发人员熟悉的标准设计模式。一些类型的 Web 应用程序将得益于 MVC 框架。一些类型将继续使用基于 Web 窗体和回发的传统 ASP.NET 应用程序模式。其他类型的 Web 应用程序将结合这两种方法;这两种方法彼此互不包含。

MVC 框架包括以下组件:

  • 2.1模型Model:

  • 模型对象是实现应用程序数据域逻辑的应用程序部件。通常,模型对象会检索模型状态并将其存储在数据库中。例如,Product 对象可能会从数据库中检索信息,操作该信息,然后将更新的信息写回到 SQL Server 数据库内的 Products 表中。

  • 在小型应用程序中,模型通常是概念上的分离,而不是实际分离。例如,如果应用程序仅读取数据集并将其发送到视图,则该应用程序没有物理模型层和关联的类。在这种情况下,数据集担当模型对象的作用。

  • 2.2视图View:

  • 视图是显示应用程序用户界面 (UI) 的组件。通常,此 UI 是用模型数据创建的。Products 表的编辑视图便是一个视图示例,该视图基于 Product 对象的当前状态显示文本框、下拉列表和复选框。

  • 2.3控制器:

  • 控制器是处理用户交互、使用模型并最终选择要呈现的视图来显示 UI 的组件。在 MVC 应用程序中,视图仅显示信息;控制器则用于处理和响应用户输入和交互。例如,控制器处理查询字符串值,并将这些值传递给模型,而模型可能会使用这些值来查询数据库。

MVC 模式可以帮助我们创建使应用程序的不同方面(输入逻辑、业务逻辑和 UI 逻辑)分离的应用程序,同时可在这些元素之间提供松散耦合。该模式指定每种逻辑在应用程序中应处的位置。UI 逻辑位于视图中。输入逻辑位于控制器中。业务逻辑位于模型中。在我们生成应用程序时,通过使用这种分离方式,可以帮助我们化繁为简,因为它可以使我们侧重于一次实现应用程序的一个方面。例如,我们可以侧重于独立于业务逻辑的视图。

MVC 应用程序的这三个主要组件之间的松散耦合也可促进并行开发。例如,一个开发人员可以从事视图方面的工作,第二个开发人员可以从事控制器逻辑方面的工作,第三个开发人员可以侧重于模型中的业务逻辑。

3.对测试驱动的开发的支持 Test Driven Development


测试驱动的开发 Test Driven Development,简称TDD,在极限编程XP中使用最多,主张就是任何系统开发,要先写测试用例,并编写测试代码,然后根据测试代码写功能代码,每次都保证测试用例成功通过。

这就是测试先行的开发方式。

TDD的优点就是避免过度开发导致的代码冗余问题,缺点就是可能开发人员过度关注测试,而忽略整体功能。

使用 MVC 模式除了可以化繁为简外,还可以使应用程序的测试工作比基于 Web 窗体的 ASP.NET Web 应用程序的测试工作更加轻松。

例如,在基于 Web 窗体的 ASP.NET Web 应用程序中,单一类既用于显示输出又用于响应用户输入。

为基于 Web 窗体的 ASP.NET 应用程序编写自动化测试可能是一项复杂的工作,因为若要测试单个页面,我们必须实例化应用程序中的页类、其所有子控件以及其他相关类。

因为为运行页面而实例化的类如此之多,所以可能难以编写专门侧重于应用程序单个部件的测试。

因此,与 MVC 应用程序测试相比,基于 Web 窗体的 ASP.NET 应用程序的测试更加难以实现。

而且,基于 Web 窗体的 ASP.NET 应用程序的测试需要 Web 服务器。MVC 框架可使组件分离并大量使用接口,这样,便可以将单个组件与框架的其余部分分开进行测试。

4.何时创建 MVC 应用程序


您必须仔细考虑是使用 ASP.NET MVC 框架还是使用 ASP.NET Web 窗体模型来实现 Web 应用程序。MVC 框架未取代 Web 窗体模型;您可以对 Web 应用程序使用任一框架。(如果您具有现有的基于 Web 窗体的应用程序,则这些应用程序将完全按照它们一贯的方式继续工作。)

在决定对特定网站使用 MVC 框架或 Web 窗体模型之前,请权衡各种方法的优点。

4.1基于 ASP.NE MVC 的 应用程序的优点

ASP.NET MVC 框架具有以下优点:

  • 将应用程序分为模型、视图和控制器,化繁为简的工作更加轻松,分离关注点,各个层次的开发人员可以专注于自己工作。

  • 它不使用视图状态或基于服务器的窗体。这使得 MVC 框架特别适合想要完全控制Web行为的开发人员。

  • 它使用一种通过单一控制器处理 Web 应用程序请求的前端控制器模式。这使您可以设计一个支持丰富路由基础结构的应用程序。有关更多信息,请参见 Front Controller(前端控制器)。

  • 它为测试驱动的开发 (TDD) 提供了更好的支持。

  • 它非常适合大型开发人员团队支持的 Web 应用程序,以及需要对应用程序行为进行极度控制的 Web 设计人员。

4.2基于 ASP.NE Web Form的 应用程序的优点

基于 Web 窗体的框架具有以下优点:

  • 它支持通过 HTTP 保留状态的事件模型,这有益于开发业务线 Web 应用程序。基于 Web 窗体的应用程序提供了在数百个服务器控件中受支持的许多事件。

  • 它使用页面控制器模式向单个页面添加功能。有关更多信息,请参见 Page Controller(页面控制器)。

  • 它针对基于服务器的窗体使用视图状态,这使得管理状态信息更加轻松。

  • 它非常适合想要利用大量组件快速开发应用程序的 Web 开发人员和设计人员的小型团队。

  • 通常,对于应用程序开发而言,它比较简单,这是因为组件(Page 类、控件等)紧密集成并且通常需要比 MVC 模型更少的代码。

5.ASP.NET MVC 框架的功能


ASP.NET MVC 框架具有以下功能:

  • 5.1分离应用程序关注点(输入逻辑、业务逻辑和 UI 逻辑)、更好的可测试性、支持测试驱动的开发 (TDD):

MVC 框架中的所有核心契约都基于接口并且可使用 mock 对象进行测试,mock 对象是模仿应用程序中实际对象的行为的模拟对象。

我们可以对应用程序进行单元测试,而不必在 ASP.NET 进程中运行控制器,这使得单元测试既快速又灵活。您可以使用任何与 .NET Framework 兼容的单元测试框架。

  • 5.2可扩展:

设计 ASP.NET MVC 框架的组件的目的是为了可以轻松地替换或自定义它们。

您可以插入自己的视图引擎、URL 路由策略、操作方法参数序列化以及其他组件。ASP.NET MVC 框架还支持使用依赖项注入 (DI) 和控制反转 (IOC) 容器模型。

DI 使您能够将对象注入到类中,而不是依靠类来创建对象本身。

IOC 指定某个对象是否需要其他对象,第一个对象应该从配置文件之类的外部源中获取第二个对象。这样,测试会更加轻松。

  • 5.3广泛支持 ASP.NET 路由:

ASP.NET 路由是一个功能强大的 URL 映射组件,它允许您生成具有易于理解和可搜索的 URL 的应用程序。URL 未必包含文件扩展名,并且旨在支持非常适合搜索引擎优化 (SEO) 和具象状态传输 (REST) 寻址的 URL 命名模式。

  • 5.4支持将现有 ASP.NET 页面功能:

继续支持 .aspx 文件、用户控件(.ascx 文件)和母版页(.master 文件)。我们可以依然嵌套母版页、内联表达式(<%= %>)、声明性服务器控件、模板、数据绑定、本地化等现有 ASP.NET 功能与 ASP.NET MVC 框架结合使用。

  • 5.5支持现有 ASP.NET 功能:

在ASP.NET MVC中我们可以继续使用 如 Forms 身份验证和 Windows 身份验证、URL 授权、成员资格和角色、输出和数据缓存、会话和配置文件状态管理、运行状况监视、配置系统以及提供程序体系结构。

6.总结

ASP.NET MVC从2009年3月发布1.0以来,更新了4个版本,正式发布了3个,4.0应该很快就出来。而微软在ASP.NET

原文地址:

http://msdn.microsoft.com/zh-cn/library/dd381412(v=vs.98).aspx

老徐Frank Xu Lei 修订、翻译、整理

来自:新青年IT学习网 http://54peixun.com/frankxulei/POST/faec4d730085486ab8aa5d7f46a05e83

排序方式: 发布日期 | 最新 | 最有用
评论
1 (1 项目的页面 1)