第一章
ASP.NET Core MVC对使用微软平台的web开发人员来说是一个根本性的转变。它强调清晰的架构、设计模式和可测试性,而且它不试图掩盖Web的工作方式。本书的第一部分旨在帮助你广泛地理解MVC开发的基本思想,包括ASP.NET Core MVC中的新特性,并在实践中体验该框架是如何使用的。
ASP.NET Core MVC是微软的一个web应用程序开发框架,它结合了模型-视图-控制器(MVC)架构的有效性和整洁性,来自敏捷开发的思想和技术,以及.NET平台的最佳部分。在这一章中,你将了解为什么微软创建了ASP.NET Core MVC,看看它是如何与它的前辈和替代品进行比较的,最后,我们将概述ASP.NET Core MVC的新特性,以及本书所涵盖的内容。
1.理解ASP.NET Core MVC发展史
原来的ASP.NET是在2002年引入的,当时微软热衷于保护传统桌面应用程序开发的主导地位,并视互联网为威胁。图1-1说明了微软当时的技术栈。
1.1.ASP.NET Web Forms
对于Web Forms,微软试图通过将用户界面(UI)建模为服务端控件对象的层次结构,来隐藏无状态性的HTTP和超文本标记语言(HTML),这在当时对许多开发人员来说是陌生的。每个控件在每次请求时跟踪自己的状态,需要时将自己渲染为HTML,并自动将客户端事件(例如,按钮单击)与相应的服务器端事件处理程序代码连接起来。实际上,Web Forms是一个巨大的抽象层,旨在通过Web交付经典的事件驱动的图形用户界面(GUI)。
目的:隐藏传统Web开发的复杂度,为习惯Winform的开发者一个熟悉的开发环境
webform的想法是让web开发感觉就像开发桌面应用程序一样。开发人员可以从有状态UI的角度考虑问题,而不需要处理一系列独立的HTTP请求和响应。微软可以无缝地将Windows桌面开发人员大军转移到web应用程序的新世界。
1.1.1、ASP.NET Web Form的问题在哪里?
传统的ASP.NET Web Forms开发在原则上是好的,但事实证明要复杂得多。问题如下:
• 视图状态过重:跨请求维护状态的实际机制(称为视图状态)导致大量数据在客户机和服务器之间传输。即使在普通的web应用程序中,这些数据也可能达到数百千字节,并且在每个请求中来回传输,导致响应变慢,并增加了服务器的带宽需求。
• 页面生命周期:将客户端事件与服务器端事件处理程序代码(页面生命周期的一部分)连接起来的机制可能是复杂而微妙的。很少有开发人员能够在运行时成功地操纵控件层次结构,而不创建视图状态错误或发现某些事件处理程序神秘地无法执行。
• 错误的关注点分离:ASP.NET Web Forms的代码隐藏模型提供了一种将应用程序代码从HTML标记中取出并放入单独的代码隐藏类的方法。这样做是为了分离逻辑和表示,但实际上,开发人员被鼓励在这些同样可怕的代码背后类中混合表示代码(例如,操作服务器端控件树)和应用程序逻辑(例如,操作数据库数据)。最终的结果可能是脆弱的和难以理解的。
1.2、原来的MVC框架
在2007年10月,微软宣布了一个新的开发平台,建立在现有的ASP.NET平台,它的目的是直接回应对Web Form的批评以及诸如Ruby on Rails等竞争平台的流行。这种新平台被称为ASP.NET MVC框架,反映了web应用程序开发中的新兴趋势,如HTML和CSS标准化、RESTful web服务、高效的单元测试,以及开发人员应该接受HTTP的无状态特性的思想。
支持原始MVC框架的概念在现在看来似乎很自然也很明显,但是在2007年的.net web开发中却缺乏这些概念。介绍了ASP.NET MVC框架将微软的web开发平台带回到了现代。
MVC框架也标志着微软态度上的重大转变,此前微软曾试图控制web应用程序工具链中的每个组件。通过MVC框架,微软在诸如jQuery等开源工具的基础上构建了设计惯例和来自竞争平台(以及更成功的平台)的最佳实践,并将源代码发布到MVC框架中供开发人员检查。
1.2.1、原来的MVC框架出了什么问题?
在MVC Framework创建之初,微软乐于在已有ASP.NET平台上构建。ASP.NET有很多可靠的底层功能,在开发过程中提供了一个领先的起点,而且它已经为开发人员所熟知和理解。
但是,将MVC Framework移植到起初为Web Forms准备的平台时,需要做出一些妥协。MVC Framework开发人员已经习惯于使用配置设置和代码微调来禁用或重新配置那些与web应用程序没有任何关系但却必须使一切正常工作的特性。
随着MVC Framework越来越受欢迎,微软开始把一些核心特性添加到WebForms中。结果是越来越奇怪的,支持MVC框架所需的设计特性被扩展为支持WebForms,进一步的设计特性使一切都契合在一起。与此同时,微软开始扩展ASP.NET提供了用于创建web服务(web API)和实时通信(SignalR)的新框架。新框架添加了它们自己的配置和开发约定,每个约定都有自己的优点和不足之处,总体结果是一片混乱。
2.理解ASP.NET Core
2015年,微软宣布了ASP.NET和MVC框架的新方向,这将最终产生ASP.NET Core MVC,也就是本书的主题。