[翻译:ASP.NET MVC 教程]ASP.NET MVC 概览
模型—视图—控制器(MVC)架构模式将一个应用程序分解为三个主要的组件:模型、视图和控制器。ASP.NET MVC framework为创建基于MVC的Web应用程序提供了一种ASP.NET Web Forms模式的替代形式。ASP.NET MVC framework是一个轻量的、高度可测试的呈现框架(与基于网页表单形式的应用程序相比而言)并且集成了现存的ASP.NET特性,诸如模板页和基于成员关系的用户认证等。ASP.NET MVC framework被定义于System.Web.Mvc命名空间下并且是一个基础的、由部分System.Web提供支持的开发框架。
MVC是一个为众多开发者所熟识的标准设计模式。一些类型的Web应用程序将会从MVC框架中获益。另一些将继续使用传统的ASP.NET应用程序开发模式,即基于网页表单及发送回传。其余类型的Web应用程序将联合使用这两种模式;两者都不排除联合使用的开发模式。
MVC框架包含了下列组件:
图1:请求一个需要一个参数值的控制器行为
l 模型。模型对象是实现应用程序数据域的业务逻辑的应用程序组成部分。通常,模型对象在数据库中检索及存储模型状态。例如,一个产品对象从位于SQL Server的数据库中检索信息、操作该信息并且写入更新后的信息回传至产品表。
在小型应用程序中,模型经常作为一个概念上的分离(或抽象)以替代实际对象。例如,如果应用程序只读取一个数据集并将它传送至视图,那么该应用程序就没有一个实际的模型层及与之相关联的类。在那种情况下,数据集就取代了模型对象的角色。
l 视图。视图是显示应用程序用户界面(User Interface, UI)的组件。典型的说,该用户界面(UI)创建自数据模型。例如,一个产品表的编辑视图,显示了基于产品对象当前状态的文本框、下拉列表和复选框等。
l 控制器。控制器是处理用户交互操作、与模型工作并且最终选择显示用户界面的视图来进行呈现的组件。在一个MVC应用程序中,视图只用来显示信息;控制器处理并回应用户的输入与交互操作。例如,控制器处理查询字符串值,然后将这些值传送至模型,通过这些值查询数据库。
MVC模式帮助你创建分离应用程序不同部分(输入逻辑、商业逻辑及用户界面逻辑)的应用程序。同时提供了位于这些元素间的一种松散的联结(低耦合)。这种模式具体到每一种业务逻辑都应位于应用程序之中。用户界面逻辑属于视图。输入逻辑属于控制器。商业逻辑属于模型。当你创建一个应用程序时,这种分离帮助你处理复杂情况,因为它能够让你专注于一次实现一个方面的功能。例如,你可以专注于视图而不必依赖商业逻辑。
除了处理复杂情况外,MVC模式使测试应用程序比起基于网页表单的ASP.NET Web应用程序更为简单。例如,在一个基于网页表单的ASP.NET Web应用程序中,一个单独的类被用来同时显示输出及回应用户的输入。编写基于网页表单的ASP.NET Web应用程序的自动化测试是十分复杂的,因为要测试一个独立的页面,你必须实例化该页面类、它的所有子控件以及在应用程序中附加的从属类。因为要运行该页面需要实例化如此多的类,编写专属聚焦于应用程序独立部分的测试是十分困难的。因此,要实现基于网页表单的ASP.NET Web应用程序的测试比起一个MVC应用程序的测试要困难得多。此外,基于网页表单的ASP.NET Web应用程序的测试需要一个Web服务器。MVC框架拆分了组件间的耦合并且使得界面可重用。这使得测试与框架的其余部分分离开的独立组件变为可能。
一个MVC应用程序三个主要组件间的松散联结(低耦合)也促进了平行化的开发。例如,一个开发者处理视图,第二个处理控制器逻辑,第三个专注于位于模型内的商业逻辑。
决定何时创建一个MVC应用程序
你必须慎重决定是究竟以ASP.NET MVC framework,还是以ASP.NET Web Forms模型来实现一个Web应用程序。MVC框架不能替代Web Forms模型;你可以使用两者中的任一者。(如果你已经有一个现存的基于网页表单的Web应用程序,就和以往一样继续工作下去即可。)
在你决定使用MVC框架或Web Forms模型来开发一个具体的网站时,请先掂量每一种手段的优势。
基于MVC Web应用程序的优势
ASP.NET MVC框架有如下的优势:
l 通过将应用程序分为模型、视图和控制器使得处理复杂情况变得更为容易。
l 无需使用视图状态或基于服务器的表单。对于想要完全控制一个应用程序行为的开发者而言,MVC框架无疑是十分理想的。
l 使用通过单独的控制器来处理Web应用程序请求的前端控制器模式。这使得你可以设计一个支持丰富路由基础的应用程序。更多信息,请参见MSDN网站上的Front Controller。
l 为测试驱动的开发(test-driven development, TDD)提供更好的支持。
l 为大型的开发团队和需要高度控制整个应用程序行为的Web设计团队所支持的Web应用程序更好地工作提供了方便。
基于网页表单的Web应用程序的优势
基于网页表单的框架有如下的优势:
l 支持通过HTTP方式保存状态的事件模型,这对商业流水线Web应用程序的开发有利。基于网页表单的应用程序提供了大量服务器控件支持的各类事件。
l 使用向单一页面增添功能的页面控制器模式。更多信息,请参见MSDN网站上的Page Controller。
l 使用视图状态或基于服务器的表单,这使得控制状态信息更为容易。
l 为小型的Web开发团队和想要利用大量可用控件来进行快速应用开发(RAD)的设计团队更好地工作提供了方便。
l 总体而言,降低了应用程序开发的复杂度,因为组件(页面类、控件等等)已被紧密集成并且相对MVC模型而言通常只要更少的代码。
ASP.NET MVC Framework的特性
ASP.NET MVC Framework提供了如下的特性:
l 应用程序任务(输入逻辑、商业逻辑和用户界面逻辑)的分离、测试能力和默认测试驱动的(TDD)开发。所有在MVC框架中的核心工作都是基于界面并且通过模拟对象(在应用程序中模仿实际对象行为的虚拟对象)可被测试。你可以单元测试应用程序而无需在ASP.NET进程中运行控制器,这使得单元测试快速且具有灵活性。你可以使用任意一种与.NET Framework相兼容的单元测试框架。
l 一个可扩展和可添加插件的框架。ASP.NET MVC Framework的组件是被设计出来的(译者注:相对于被封装的组件而言,如ASP.NET服务器控件),以至于它们能够容易地被替换及自定义化。你可以插入你自己的视图引擎、URL路由策略、串行化的功能—方法参数以及其他的组件。ASP.NET MVC Framework同样支持依赖注入(Dependency Injection , DI)以及控制转换(Inversion of Control ,IOC)容器模型的使用。DI允许你将对象注入类中以替代依靠该类来创建对象本身。IOC具体指如果一个对象需要另一个对象,那么前者应当从一个外部资源,例如配置文件中获取后者。这使得测试变得更为容易。
l 功能强大的路由映射组件能让你构建具有易于理解和便于搜索的URLs的应用程序。URLs不一定要包含文件扩展名,并且它们是为支持URL命名模式,即更好地为搜索引擎优化(search engine optimization. SEO)和代表状态传输位置(representational state transfer, REST)工作,而被设计出来的。
l 支持使用现存的ASP.NET页面(.aspx 文件)、用户控件(.ascx文件)以及模板页(.master 文件)标签文件中的标签作为视图模板。你可以使用现存的ASP.NET特性与ASP.NET MVC framework一同工作,例如嵌套模板页,in-line表达式(<%= %>)、声明服务器控件、模板、数据绑定、本地化等等。
l 支持现存的ASP.NET特性。ASP.NET MVC允许你使用的特性有表单认证和Windows认证、URL权限、成员关系及角色分配、输出及数据缓存、会话及信息状态管理、健康度监测、配置系统和架构提供。
文章出处:Kinglee’s Blog (http://www.cnblogs.com/Kinglee/)
版权声明:本文的版权归作者与博客园共有。转载时须注明本文的详细链接,否则作者将保留追究其法律责任。