TOC

This article has been localized into Chinese by the community.

内容介绍:

ASP.NET MVC 与 Web Forms 的对比

ASP.NET 框架的第一个版本是在2002年发布的,与之附带的是 Web Forms 视图引擎,而且只有这一种视图引擎。之后,为了支持 MVC 这类东西,微软拓展了 ASP.NET 框架,使其可以支持多种视图引擎。但多年以来,如果你曾使用 ASP.NET 框架,那也就意味着你同时也使用了 Web Forms。

微软在创建 Web Forms 时有一个很值得称赞的目标:他们想尽可能多地抽象掉 HTTP 协议的粗糙细节以及它的无状态特性,使 Web 开发的体验更接近于 Windows 应用程序的开发。在当时,Windows 应用程序的开发体验是非常令人愉快的。

他们通过引入 ViewState 来实现这一点,以确保所有表单的状态在发送回服务器时都能够被保留。保留表单的状态是通过服务器控件来实现的。服务器控件是将 HTML 和 CSS 的渲染封装到一个任意的控件中,你可以通逻辑属性来自定义控件,无需直接混合 HTML 和 CSS 代码。

他们也引入了基于事件驱动的模型,当时的 Windows 开发者都熟知这点。该模型允许开发者响应真实的事件。例如,一个按钮被点击或一个CheckBox的值正在被改变,而无需在每次页面加载后,手动对这些控件的状态进行检查。这也意味着,前端的标记代码和后端代码是分离的,理论上来说这点很不错。

Web Form 的败笔

对于很多开发者来说,Web Forms 是一缕新鲜的空气,它也帮助了许多新人开发者与一些只熟悉 Windows 应用程序开发的开发者来学习构建 Web 应用程序。很不幸的是,微软没能将抽象层做得完美无瑕,因为一系列问题很快接踵而至。其中一部分问题在后续版本中得到了修复,而其它的一些问题与 Web Form 的基本工作原理有关(也就是说,它本身存在一些硬伤),因此非常难以被改变。Web Forms 技术饱受以下几点原因所诟病:

ViewState 使页面更重了

为了追踪页面上每一个服务端控件的状态,就需要用到 ViewState 字符串。那么,每次请求都会导致 ViewState 字符串被传回服务器,然后再由服务器传出去。由此可见,Web Form 的页面体量就会变得很重了。如果你正在构建一个中等复杂度的页面,ViewState 结果字符串就能达到几百 KB。这将导致页面的加载时间变长,尤其是使用手机对页面进行访问时。随着全世界访问网站的手机数量增加,这是一个非常现实的问题。

服务端控件限制了你对其输出的HTML代码的控制权

服务端控件使你能够很容易地创建一些有用的东西,但你永远都没法控制它所渲染出来的HTML代码。当你需要微调你的前端代码时,或者你面临了浏览器兼容性问题时,这点就成为了一个难题。

Web Form 对自动化测试非常不友好

Web Form 模型是在自动化测试/单元测试壮大之前被引入的。当自动化测试与单元测试壮大起来之后,很容易看出来 Web Form 很难(如果硬说不是不可能的话)进行有效的单元测试。

ASP.NET MVC 比 Web Form 有所增强之处

ASP.NET MVC 删除了很多由 Web Form 实现的抽象层。例如,通常情况下都是由你自己来生成 HTML 代码,而不再是依赖于服务端控件。而且你也不用再获取 ViewState 了,有效地解决了 ViewState 使页面变重的问题(也会同时使一些服务端控件,例如 GridView 和 Repeater 渲染无效)。

由于不同层级之间的松耦合,MVC 模型完美适配自动化测试/单元测试。

你应该选择哪种技术?

在阅读本文上方的内容时,你会觉得 Web Form 就像是已经过时了的技术。这里我要重点强调一下——实际上 Web Form 并不是过时技术。Web Form 仍在被微软活跃地开发,Asp.Net Web Form也依然是你踏入 Web 开发世界的一种可能的选择。尤其是当你想做点什么,然后在短时间内就能让它运行起来的时候。有大量的高级服务端控件可以帮你轻松地完成一些急活。不过代价就是,你不能全部手写你自己的 HTML 前端代码。

如果你已经了解了如何使用 Web Form,你绝对需要尝试一下 ASP.NET MVC,尤其是如果上述所提到的 Web Form 的一些痛点也正在深深地困扰着你时。如果你是 Web 开发新人,并且正在这两种技术中二选一的话,我的建议还是让你试一下 ASP.NET MVC。MVC 模型对于一些人来说是具有一定制约性的,并且,在一开始就遵从一种模式很显然是比不遵从难很多的。不过一旦你适应了它,使用 MVC 模型进行开发工作是非常愉快的。从 MVC 模型收获的用户关注度来看,这种愉快的感觉并不会在之后消失掉。(意思就是习惯了之后,很多人都爱上了 MVC 模型)

总结

如果你是新人 Web 开发者,我想说的是——尽管 ASP.NET Web Form 更容易上手,你也应该先试试 ASP.NET MVC。不过不要担心,本系列教程将帮助你开始学习MVC,并通过开发你的第一个 ASP.NET MVC 程序这个过程来引导你学习。


This article has been fully translated into the following languages: Is your preferred language not on the list? Click here to help us translate this article into your language!