《精通 ASP.NET MVC 4》----第 1 章 伟大的思想 1.1 Web开发简史
本节书摘来自异步社区《精通 ASP.NET MVC 4》一书中的第1章,第1.1节,作者: 【美】Adam Freeman ,译者: 李萍 , 徐燕萍 , 林逸 , 更多章节内容可以访问云栖社区“异步社区”公众号查看。
第 1 章 伟大的思想精通 ASP.NET MVC 4
ASP.NET MVC是微软的一个Web开发框架,它整合了“模型—视图—控制器(MVC)”架构的高效与整洁、敏捷开发最新的思想与技术以及当前ASP.NET平台的精华部分。ASP.NET MVC可以完全替代传统的ASP.NET Web Form,除了一些微不足道的Web小项目之外,在各种Web开发项目中都具有明显的优势。在本章中,读者将了解微软当初创建ASP.NET MVC的原因,与它的前辈和替代品之间的区别,以及ASP.NET MVC 4的新特性。
本文仅用于学习和交流目的,不代表异步社区观点。非商业转载请注明作译者、出处,并保留本文的原始链接。
1.1 Web开发简史精通 ASP.NET MVC 4
为了理解ASP.NET MVC的特色及其设计目标,有必要先来了解一下到目前为止Web开发的历史——虽然这很简短。近年来,微软的Web开发平台演变得越来越强大,但也越来越复杂。如表1-1所示,每一个新平台都修正了它前一版本中的不足。
*CGI是Web服务器与返回动态内容的任意可执行程序进行连接的一种标准方法。其规范由美国国家超级计算应用中心(NCSA)维护。
1.1.1 传统的ASP.NET Web FormASP.NET在2002年刚问世起就是一种巨大的转移。图1-1描述了当时微软的技术堆栈。
![df3acf2406d209ed72018a06746604800b312fcc](https://yqfile.alicdn.com/df3acf2406d209ed72018a06746604800b312fcc.png)
(注:此图的含义为,Web Form建立在ASP.NET之上,而ASP.NET又建立在.NET平台之上,MVC所起的作用是替代这里的Web Form——译者注)
通过将用户界面(UI)模拟为服务器端控件对象层的办法,微软试图利用Web Form把HTTP(具有无状态本质)和HTML(当时许多开发人员尚不熟悉)都隐藏起来。每个控件在请求期间都跟踪自己的状态(通过使用View State工具),在需要时把自己渲染成HTML,并自动地将客户端事件(如按钮点击)与相应的服务器端的事件处理器代码相关联。结果,Web Form被设计成在Web上传递传统的事件驱动式图形用户界面(GUI)的一个巨大的抽象层。
其思想是,让Web开发在感觉上与Windows Form开发相同。开发者不再需要以一系列独立的HTTP请求和响应进行工作,可以认为它是一种状态化的UI。人们可以忘记Web及其无状态本质,转而用一种“拖—放”式设计器来创建UI,并设想——或至少假装——所有事情都发生在服务器上。
1.1.2 ASP.NET Web Form的问题传统的ASP.NET Web Form开发曾是一种了不起的思想,但事实证明它更加复杂。随着时间的推移,Web Form在实际项目中显现出了一些缺陷。
视图状态重负:跨请求地维护状态的实际机制(称为视图状态,View State)导致在客户端与服务器之间传输大块数据。这种数据即使在最适度的Web应用程序中也达到几百KB,而且它来回于每次请求之间,导致响应时间很慢,增加了服务器的带宽需求。
页面生命周期:连接客户端事件与服务器端事件处理器代码的机制(是页面的部分生命周期)格外复杂和棘手。很少有开发者在不产生View State错误或不发现某些事件处理器莫明失效的情况下,能够在程序运行期间成功地维护控件层。
关注分离的错误观念:ASP.NET的后台代码模型提供了一种手段,把应用程序代码从它的HTML标记中提取出来,并放到一个独立的后台代码类中。这种逻辑与表现的分离曾得到广泛的赞许,但事实上,却又鼓励开发者在这些怪异的后台代码类中,把表现代码(如操纵服务器端控件树)与它们的应用程序逻辑(如维护数据库数据)混在一起。最终结果是脆弱和难以理解。
HTML上的受限控制:服务器控件将自己渲染成HTML,但并不是用户所希望的那种必要的HTML。在ASP.NET 4之前,这种HTML输出通常不符合Web标准,或不能很好地使用层叠式样式表(CSS,Cascading Style Sheets)。而且,服务器控件会生成不可预知且复杂的ID标签属性值,这些ID难以用JavaScript进行访问。这些问题在ASP.NET 4和ASP.NET 4.5中改善了不少,但要得到人们所期望的HTML,仍然是需要技巧的。
有缺陷的抽象:Web Form试图尽可能地隐去HTML和HTTP(这是通过Web Form的抽象层实现的——译者注)。当用户试图实现自定义行为时,时常需要放弃这种抽象,这迫使用户需要采取回发事件机制的逆向工程,或采取笨拙的方法(这样才可能绕过Web Form的抽象层,但给编程造成了难度——译者注),以使它生成所希望的HTML。这种抽象可能对有能力的Web开发者构成一个极大的障碍(由于编程难度,给希望实现自定义行为的开发人员造成了一定障碍——译者注)。
低可测试性:ASP.NET的设计者们恐怕未曾预料到,自动测试会成为软件开发的主要成分。因此,他们设计的这种紧耦合体系结构不适合单元测试也就不足为奇了。集成测试也很具挑战性。
ASP.NET一直在不断改进,2.0版添加了一组标准的应用程序组件,可以减少开发者需要自行编写的代码量。2007年发布的AJAX是微软对Web 2.0/AJAX疯狂时代的回应,它支持富客户端交互,同时也简化了开发者的工作。随着ASP.NET 4的发布事情又改进了很多,它第一次以严肃的方式迎合Web标准。最新版的ASP.NET 4.5实际上采用了ASP.NET MVC的一些新特性,并将它们运用于Web Form领域,这解决了一些较棘手的问题。不过,即便如此,许多固有的局限性依然存在。
本文仅用于学习和交流目的,不代表异步社区观点。非商业转载请注明作译者、出处,并保留本文的原始链接。
基于Asp.Net Mvc开发的个人博客系统 一个基于Mvc 5构建的简单、代码层级分明的开源个人博客系统。前端美观大气、后台采用RightControl .NET通用角色权限系统,开发简单、效率高。网站配置采用XML配置,灵活可以根据自己是需求进行个性化配置。系统功能完备,完全可以满足需求,基本不用二次开发,非常使用程序员的个人博客。
异步社区 异步社区(www.epubit.com)是人民邮电出版社旗下IT专业图书旗舰社区,也是国内领先的IT专业图书社区,致力于优质学习内容的出版和分享,实现了纸书电子书的同步上架,于2015年8月上线运营。公众号【异步图书】,每日赠送异步新书。
Java Spring Boot开发实战系列课程【第7讲】:Spring Boot 2.0安全机制与MVC身份验证实战(Java面试题) 立即下载
相关文章
- ASP.NET Core MVC之ViewComponents(视图组件)知多少?
- Secure a Web API with Individual Accounts and Local Login in ASP.NET Web API 2.2
- 如何从40亿整数中找到不存在的一个 webservice Asp.Net Core 轻松学-10分钟使用EFCore连接MSSQL数据库 WPF实战案例-打印 RabbitMQ与.net core(五) topic类型 与 headers类型 的Exchange
- 中小研发团队架构实践之生产环境诊断工具WinDbg 三分钟学会.NET微服务之Polly 使用.Net Core+IView+Vue集成上传图片功能 Fiddler原理~知多少? ABP框架(asp.net core 2.X+Vue)模板项目学习之路(一) C#程序中设置全局代理(Global Proxy) WCF 4.0 使用说明 如何在IIS上发布,并能正常访问
- 【C#】对异步请求处理程序IHttpAsyncHandler的理解和分享一个易用性封装 【手记】走近科学之为什么明明实现了IEnumerable<T>的类型却不能调用LINQ扩展方法 【手记】手机网页弹出层后屏蔽底层的滑动响应 【手记】ASP.NET提示“未能创建类型”处理 【Web】一个非常简单的移动web消息框 【手记】解决EXCEL跑SQL遇“查询无法运行或数据库表无法打开...”
- IT咨询顾问:一次吐血的项目救火 java或判断优化小技巧 asp.net core Session的测试使用心得 【.NET架构】BIM软件架构02:Web管控平台后台架构 NetCore入门篇:(十一)NetCore项目读取配置文件appsettings.json 使用LINQ生成Where的SQL语句 js_jquery_创建cookie有效期问题_时区问题
- .NET版Word处理控件Aspose.words功能演示:在ASP.NET MVC中创建MS Word编辑器
- asp.net 框架初接触
- Asp.Net中Web.Config中的数据库连接字符串的调用方法(初学者实例)
- Professional ASP.NET Design Patterns
- 报错:ASP.NET Web API中找不到与请求匹配的HTTP资源
- 使用HttpClient对ASP.NET Web API服务实现增删改查
- MVC项目实践,在三层架构下实现SportsStore-09,ASP.NET MVC调用ASP.NET Web API的查询服务
- 重温.NET下Assembly的加载过程
- ASP.NET MVC 验证
- ASP.NET Web API 数据提供系统相关类型及其关系
- 合适么?现在学ASP.NET Core入门编程……
- ASP.NET Core中使用Autofac进行属性注入
- ASP.NET+d3.js实现Sqlserver数据库的可视化展示
- 一、在 ASP.NET Core 中使用 SignalR
- ASP.NET 3.5(c#)区域化设置(LCID)
- asp.net web.config 经典模式和集成模式相关配置
- asp.net web api的自托管模式HttpSelfHostServer可以以控制台程序或windows服务程序为宿主,不单单依赖于IIS web服务器
- 使 Asp.net Core Hosting Bundle 立即生效
- DevExtreme v 22.1 ASP.NET Core 应用程序项目,配置PivotGrid控件
- 使用 ASP.NET Core 5 Web API 创建可发现的 HTTP API
- [.NET]c#.net程序中使用ffmpeg.exe来处理视频并生成上传视频的截图
- ASP.NET Web Form(八)
- ASP.NET Web Pages - 添加 Razor 代码
- ASP.NET MVC实现Excel文件的上传下载