喜欢MVC的轻快优雅,所以把官方的翻译一下,分几次发上来:
ASP.NET Model-View-Controller Applications
介绍
Model-View-Controller (MVC) 模式分类了一个 MVC Web application的各个组件. 这种分离让你对每个独立的部分有了更多的控制,这能让你更容易的开发、修改、测试他们。
下面的主题描述了 ASP.NET MVC framework 和如何创建一个MVC applications. 以及如何创建 MVC 单元测试项目,可以让你使用测试驱动的开发技术 (TDD) 来开发 MVC applications.另外, 还告诉你如何通过使用controller-action和framework-helper方法来渲染views. 也解释了如何用action filters来限制对 action 方法的访问, 处理错误,缓存action方法的输出, 以及如何通过优先级来控制filters程序是在action 方法运行之前还是之后来执行.
ASP.NET MVC 概览
Introduction
Model-View-Controller (MVC) 架构模式将一个应用程序分离成主要的三个组件: the model, the view, and the controller. ASP.NET MVC 框架提供了一种ASP.NET Web Forms模式的替换,让你可以创建给予MVC的 Web应用. ASP.NET MVC 框架是一个轻量级的, 高可测试性的显示框架,并集成了现有的ASP.NET 特性, 比如 master pages 、membership-based 权限. MVC framework 定义在System.Web.Mvc 命名空间,以System.Web 空间为基础和支撑.
MVC 是一个许多开发人员都熟悉的开发模式.一些类型的Web应用将会受益于MVC framework. 一些将继续使用传统的基于Web Forms 和 postbacks的 ASP.NET application 模式. 另外一些将同时使用两种类型,他们互相并不排斥.
MVC framework 包含下边的这些组件:
Models. Model 对象程序中实现逻辑和数据域的地方. 通常, model 对象检索和存储 model 状态到数据库. 例如,一个产品对象需要从数据库中检索信息,对它进行操作, 并把信息更新会数据库中的Products表.
在小型项目中, model通常是一个概念上的分离,而不是在物理上存在. 例如, 如果一个程序仅仅是读取dataset 和发送数据到 view, 这个程序没有一个物理上的 model 层以及相关的类. 在这种情况下, dataset 就取代了model 对象的角色。
Views. Views 是用来显示程序的用户界面的部分(UI). 典型的, UI是从model 数据中创建的. 比方说一个Products表的编辑视图显示text boxes, drop-down lists, and check boxes,是基于Products对象的当前状态的.
Controllers. Controllers 是用来处理用户交互,与model 协同工作,决定选择哪个View来渲染UI的组件. 在MVC程序中, view只负责显示信息; controller 负责处理、响应用户输入、交互. 比如, controller 处理query-string 的值, 并传递这些值到model, 以用来查询数据库。
MVC 模式可以帮助你创建关注分离的应用(输入逻辑, 商务逻辑, UI逻辑), 这些元素之间是松耦合的. 这个模式指定了每种逻辑应该放在应用程序的什么位置. UI逻辑属于view. Input逻辑属于controller. 商业逻辑属于model. 这种分离能帮助你管理程序中的复杂性, 因为它允许你在某个时间点只关注实现的一个方面. 比如, 你可以焦点在view而不用依赖逻辑层.
在管理复杂性上, MVC模式比Web Forms更易测试. 比如, 在Web Forms,单个类被同时用来显示输出和响应用户输入. 编写Web Forms自动测试是复杂的,因为测试一个独立的页面, 你必须实例化page类,所有的子控件,和依赖的其他类. 因为这么多类都要实例化来运行这个页面, 很难为程序中独立的部分写出排他的测试用例来. 为Web Forms写测试用例要比MVC难得多. 此外, 测试Web Forms需要一个Web server. MVC 框架解耦了各个组件而且强烈依赖接口, 这样就可以测试独立的一个组件而把框架的其他部分隔离开来.
MVC中三个组件的松耦合也促进了平行开发. 例如,一个开发人员开发view, 第二个开发人员可以开发controller的逻辑, 第三个开发人员可以关注model中的商业逻辑。
决定什么时候来创建一个 MVC Application
你需要仔细考虑实现一个Web application到底是用ASP.NET MVC还是Web Forms. MVC并不能替代Web Forms; 你可以同时使用. (如果你已有一个基于Web Forms的程序,他们能像往常一样运行良好.)
在你决定使用MVC或者Web Forms前,请衡量各自的优点。
基于MVC的Web程序的优点
ASP.NET MVC提供了以下优点:
通过分离一个程序为model, the view, controller,将更容易管理其复杂性.
它不使用view state 和服务端表单. 这对于想完全控制程序行为的开发人员来说MVC更加理想.
它使用前置控制模式通过单个的控制器来处理Web请求. 这让你可以设计一个程序来支持丰富的路由功能. 更多信息, 请看 Front Controller 在MSDN 网站.
对测试驱动的开发提供更好的支持 (TDD).
它支持大团队开发,并给那些需要高度控制程序行为的开发者提供了更多的支持.
基于Web Forms Web程序的优点
Web Forms提供以下优点:
它支持事件模型在HTTP协议下保持状态信息, line-of-business Web程序开发从中受益. Web Forms提供了一系列的事件来支持成千上百的服务端控件.
他使用Page Controller 模式来添加功能到单独的页面. 更多信息, 看 Page Controller 在MSDN网站.
它使用view state和服务端表单, 让状态管理更容易.
在小型开发团队中他工作良好,而且设计人员可以以利用大量的组件来进行快速的开发.
通常, 用它开发程序更简单, 因为组件高度集成而且比起MVC通常代码量更少.
ASP.NET MVC的特性
ASP.NET MVC提供以下特性:
分离的程序任务(输入逻辑, 商务逻辑, UI逻辑), 可测试得, 测试驱动的开发 (TDD). MVC中所有的核心契约都是基于接口的而且能使用模拟对象进行测试, 这些模拟对象可以模仿实际对象的行为. 你可以对controllers进行单元测试并不需要启动ASP.NET进程, 这让单元测试更快更富弹性. 你可以使用任何兼容.NET的测试框架.
是一个可扩展的插件化的框架. ASP.NET MVC的组件被设计成很容易替换和自定义的. 你可以插入你自己的视图引擎, URL路由策略, action-method参数序列化, 和其他组件. ASP.NET MVC也支持依赖注入 (DI)反转控制(IOC)容器模式. DI允许你注入对象到类, 而不必自己创建它的实例. IOC指出如果一个对象需要另一个对象, 第一个对象可获得第二个对象通过外部来源,比如一个配置文件.这让测试更容易.
更强大的URL映射组件让你的程序拥有可理解的可查询的URLs. URLs不包含文件扩展名, 且设计成URL 命名模式在搜索引擎中得到优化 (SEO) ,表象化状态转变(REST)的地址.
支持ASP.NET中已存在的页标记 (.aspx文件), 用户控件 (.ascx 文件), 模板页 (.master 文件). 你可以使用已有的ASP.NET的特征, 比如嵌套模板页, in-line 表达式 (<%= %>), 声明的服务端控件, 模板, 数据绑定, 定位, 等等.
支持已有的ASP.NET特征. ASP.NET MVC forms验证 和 Windows 授权, URL 授权, membership, 角色, 输出缓存, session 和 profile 状态管理, 健康监视, 配置系统, provider架构.