为什么这世上还需要另一个Web架构? 这个问题可能一直就在读者的脑里盘旋,也可能是当有人看到本书放在书架上面时会有这一疑问。在过去的几年里,本书的几个作者也多次思考这一问题。 确实,现在市面上有很多架构在行业上使用,而且充满了各种噱头。简而言之,很容易让人产生怀疑。就像本书的作者一样,在较深入地研究了最新最好的Web架构之后,他们都不约而同地意识到在过去的10年里这一行业已经走得很远。 早在1997年,Rob就开始使用Classic ASP来为Web编程,曾一度沉浸于刺激和兴奋中。随着.NET的出现,他记得他曾经跑出自己的办公室,让所有人停下手头的工作,然后向他们解释到:世界绕着他的轴倾斜了。 作者对于ASP.NET MVC也有相同的感觉。这不是因为它“与众不同”,而是因为它向开发人员提供了“按照自己的方式工作”的机会。不喜欢平台提供的视图?那么修改它。ASP.NET MVC架构几乎每个部分都是“可互换的”—— 就好比,如果嫌鞋子小的话,就换一双。不喜欢领带?为什么不用领结呢?一切尽在掌握中。 ASP.NET MVC是一个有着大量约定的Web架构。如果遵循这些约定,您的工作会变得很简单;但是如果不需要这些约定,那么您可以迅速脱离该架构,按照自己想要的方式来完成工作。 虽然本书探讨的是关于ASP.NET MVC所带来的“独特”体验,但是更为重要的是,读者将会学到通过自己的方式来拓展ASP.NET MVC的更实用的方法—— 然后,读者可能会希望与其他人共享这些技巧。 由于其可扩充性以及关注于“按自己的方式工作”,所以本书的作者很高兴地接受了这个Web架构,并希望读者与他们同行。 本书读者对象 本书适合的读者对象是这样的一些Web开发人员—— 他们可能希望向他们的网站上增加更多的测试,也可能希望能做出一些与众不同的东西。 在本书的一些地方,作者假设读者已经熟悉ASP.NET Web Forms,至少已经从外围了解了一些内容。因为现在有很多ASP.NET Web Forms的开发人员对ASP.NET MVC很感兴趣,所以作者在本书的很多地方比较了这两种技术。即使不是ASP.NET的开发人员,即使ASP.NET MVC可能并不是您想要的Web技术,但是您仍然可能发现本书这些章节是很有趣的——不管是出于学习的目的,还是出于摸清来龙去脉的目的。 值得再次指出的是,ASP.NET MVC并不是ASP.NET Web Forms的替代品。很多Web开发人员将大量注意力放在了其他Web架构上(如Ruby on Rails、Django),它们融入了MVC(Model-View-Controller)应用程序模式;如果您不是开发人员,或者甚至只是出于好奇,那么本书也适合您。 MVC支持在应用程序中的组件之间实现“更清晰的关注点分离”(但是需要特别小心)。本书将在后面探讨这些分支,但是如果必须以一句话来描述的话,那就是:ASP.NET MVC是去掉了障碍的ASP.NET。ASP.NET MVC是一个修补型的架构,它提供了对HTML和JavaScript的细粒度控制以及对应用程序编程流程的完全控制。 在MVC中没有声明性的服务器控件,有人可能会喜欢这些控件,有人则可能不喜欢。在不久的将来,MVC小组可能会向混合物中添加声明性的视图控件,但是这些控件将与ASP.NET Web Forms开发人员熟悉的组件大相径庭,这些控件封装了提供给视图的逻辑以及用于响应用户输入的逻辑等。将所有这些封装在视图的单个控件中将违反“关注点分离”,这对于该架构是非常重要的。这样,抽象的层次倒塌了,所有的门和窗户都敞开,空气可以自由流入。 最后一个不同之处是,ASP.NET MVC更像是摩托车,而ASP.NET Web Forms可能更像小型客车,而且配备有安全气囊以及DVD播放器(这样在驱车去岳父家赴周末晚宴的时候如果有小孩子,可以避免他们打闹)。有些人喜欢摩托车,有些人则喜欢小型客车。它们都可以带您去想去的地方,但是从技术讲,它们都并不胜于对方。 本书组织结构 本书分成了三大部分,每个部分又由若干章节组成。 第一部分介绍了MVC模式以及ASP.NET MVC是如何实现该模式的。 第1章首先讲述了模型-视图-控制器(Model-View-Controller)模式,解释了该模式的基本概念并提供一些关于该模式历史的介绍。然后,介绍MVC模式随着其通过各种架构实施后而反映在Web上的状态,如ASP.NET MVC。 第2章介绍了ASP.NET MVC与ASP.NET Web Forms的不同之处以及如何建立并运行ASP.NET MVC。 第3章探讨了标准MVC应用程序的结构并详细介绍了从中将能获得的知识。该章介绍了一些背后的约定和资料,以帮助研究ASP.NET MVC请求的整个请求生命期。 第4章深入探讨了路由选择的问题,进而描述了URL在应用程序中所担当的角色以及路由选择是如何解决这一问题的。它还与URL重写路由进行区分,并介绍了扩展路由和为路由编写测试。 第5章介绍了控制器以及控制器动作——什么是控制器以及如何编写控制器。该章还介绍了动作结果(这些结果由控制器的动作返回)以及它们的用途。 第6章和第7章主要介绍了视图和视图引擎,然后描述了AJAX在视图中扮演的角色。 第二部分主要介绍高级技术以及扩充架构。 第8章详细介绍了动作过滤器。动作过滤器为向动作方法添加横向(cross-cutting)行为提供了可扩充的点。 第9章介绍了安全性以及构建安全应用程序的好的实践。 第10章介绍了构建可在Web上使用的不同类型的服务并与之交互的各种方法。 由于测试驱动开发(Test Driven Development,TDD)运用到了ASP.NET MVC中,因此本书第11章提供了一个关于它的简单介绍。然后,该章介绍了构建可测试应用程序的实用模式和实践。 本书最后一部分介绍了一些指导原则和最佳实践,并展望了ASP.NET MVC的未来。 第12章介绍了如何将Web Forms和MVC相结合和使这两种方法共存于同一个应用程序中的方法,还讲述了如何将一个应用程序从Web Forms迁移至MVC。 在安排本书内容时,我们尽量做到了每一章都建立在前一章的基础上。如果已经熟悉ASP.NET MVC,那么可以跳过前几章,直接进入第4章开始学习。 使用本书前的准备 为了使用ASP.NET MVC,可能需要一个Visual Studio副本。可以使用Visual Studio 2008 Web Developer Express SP1或任何Visual Studio 2008的付费版本(如Visual Studio 2008 Professional)。如果准备使用Visual Studio的Web Developer Express版本,那么需要确认使用的是SP1。ASP.NET MVC要求使用Web应用程序 Projects(WAP)而不是使用Web Site Projects,这一功能添加在Web Developer Express的SP1中。 此外,还需要确保安装了.NET Framework 3.5(最小安装)。运行库不一定要求用.NET 3.5 SP1运行。 下面列出了可从何处下载到所需的软件。 ● Visual Studio或Visual Studio Express:或 ● ASP.NET MVC:/mvc 源代码 在读者学习本书中的示例时,可以手工输入所有的代码,也可以使用本书附带的源代码文件。本书使用的所有源代码都可以从本书合作站点/或www.tupwk.com.cn/downpage上下载。登录到站点/,使用Search工具或使用书名列表就可以找到本书。接着单击本书细目页面上的Download Code链接,就可以获得所有的源代码。 注释: 由于许多图书的标题都很类似,所以按ISBN搜索是最简单的,本书英文版的ISBN是978-0-470-38461-9。 在下载了代码后,只需用自己喜欢的解压缩软件对它进行解压缩即可。另外,也可以进入/dynamic/books/download.aspx上的Wrox代码下载主页,查看本书和其他Wrox图书的所有代码。 勘误表 尽管我们已经尽了各种努力来保证文章或代码中不出现错误,但是错误总是难免的,如果您在本书中找到了错误,例如拼写错误或代码错误,请告诉我们,我们将非常感激。通过勘误表,可以让其他读者避免受挫,当然,这还有助于我们提供更高质量的信息。 请给wkservice@vip.163.com发电子邮件,我们会检查您的反馈信息,如果是正确的,我们将在本书的后续版本中采用。 要在网站上找到本书英文版的勘误表,可以登录,通过Search工具或书名列表查找本书,然后在本书的细目页面上,单击Book Errata链接。在这个页面上可以查看到Wrox编辑已提交和粘贴的所有勘误项。完整的图书列表还包括每本书的勘误表,网址是/misc-pages/booklist.shtml。 如果想与作者和同行讨论,请加入上的P2P论坛。这个论坛是一个基于Web的系统,便于您张贴与Wrox图书相关的消息和相关技术,与其他读者和技术用户交流心得。该论坛提供了订阅功能,当论坛上有新的消息时,它可以给您传送感兴趣的论题。Wrox作者、编辑和其他业界专家和读者都会到这个论坛上来探讨问题。 在上,有许多不同的论坛,它们不仅有助于阅读本书,还有助于开发自己的应用程序。要加入论坛,可以遵循下面的步骤: (1) 进入,单击Register链接。 (2) 阅读使用协议,并单击Agree按扭。 (3) 填写加入该论坛所需要的信息和自己希望提供的其他信息,单击Submit按扭。 (4) 您会收到一封电子邮件,其中的信息描述了如何验证账户,完成加入过程。 注释: 不加入P2P也可以阅读论坛上的消息,但要张贴自己的消息,就必须加入该论坛。 加入论坛后,就可以张贴新消息,响应其他用户张贴的消息。可以随时在Web上阅读消息。如果要让该网站给自己发送特定论坛中的消息,可以单击论坛列表中该论坛名旁边的Subscribe to this Forum图标。 关于使用Wrox P2P的更多信息,可阅读P2P FAQ,了解论坛软件的工作情况以及P2P和Wrox图书的许多常见问题。要阅读FAQ,可以在任意P2P页面上单击FAQ链接。