《精通 ASP.NET MVC 5》----第1章 ASP.NET MVC背景 1.1 理解ASP.NET历史

第1章 ASP.NET MVC背景

精通 ASP.NET MVC 5
ASP.NET MVC是微软公司的一款Web开发框架,整合了“模型-视图-控制器”架构的高效与整洁、敏捷开发最现代的思想与技术,以及当前ASP.NET平台最好的部分。ASP.NET MVC是传统ASP.NET Web Form的一个完善的替代品。除了一些微不足道的Web开发项目之外,在各种Web开发项目中,它都具有明显的优势。在本章中,你将了解微软公司当初为什么创建ASP.NET MVC,与它的前版和替代品之间的比较,最后概述ASP.NET MVC 5的新特性以及本书的内容。

1.1 理解ASP.NET历史

ASP.NET自2002年刚问世起,就是一种巨大的转移。图1-1描述了当时微软公司的技术堆栈。

注:此图的含义为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,因而,微软公司可以让Windows的桌面开发人员向新型的Web应用程序领域实现无缝的转型。

ASP.NET Web Form的问题
传统的ASP.NET 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的设计者恐怕未曾预料到,自动测试会成为软件开发的主要成分。因此,他们设计的这种紧耦合体系结构不适合于单元测试,也就不足为奇了。集成测试也很具挑战性。
Web Form也并非一无是处,微软公司投入了大量精力,以改善标准兼容性、简化开发过程,甚至从ASP.NET MVC中提取了一些特性。Web Form擅长速效,而且在一天之内就能够建立和运行一个相当复杂的Web程序。但是,除非在开发期间足够小心,否则会发现所创建的程序难以测试和维护。

注:
ASP.NET Web Form的完整细节,请参阅笔者的Pro ASP.NET 4.5 in C#一书,由Apress出版。该书涵盖整个框架,并为避免大多数严重缺陷提供了最佳实践指南。

时间: 2024-09-05 04:24:02

《精通 ASP.NET MVC 5》----第1章 ASP.NET MVC背景 1.1 理解ASP.NET历史的相关文章

《精通 ASP.NET MVC 5》----第2章 第一个MVC应用程序 2.1 准备Visual Studio

第2章 第一个MVC应用程序 精通 ASP.NET MVC 5 鉴赏一款软件开发框架最好的方式是介入其中并使用它,本章将使用ASP.NET MVC框架创建一个简单的数据录入应用程序.笔者会将过程分解成一个个的步骤,以便笔者能够看出如何构造ASP.NET MVC应用程序.为了保持过程简单,这里将跳过某些技术细节.但不必着急,如果是MVC新手,你会发现大量感兴趣的内容.对于一些未进行解释的内容,笔者提供了参考章节,在那里你会看到完整的细节. 2.1 准备Visual Studio Visual St

ASP.NET MVC案例教程(基于ASP.NET MVC beta)—第五篇:MVC整合Ajax

摘要 本文将从完成"输入数据验证"这个功能出发,逐渐展开ASP.NET MVC与Ajax结合的方法.首先,本文将使用ASP.NET MVC提供的同步方式完 成数据验证.而后,将分别结合ASP.NET AJAX和JQuery将这个功能重构成异步形式. 数据验证 在上一篇文章中,我们完成了发布公告的功能.但是从健壮性角度看,这个功能并不完善,因为一般情况下,我们输入的数据要符合一定的 约束条件,例如,在我们的例子中,我们至少不能将空字符串作为标题或内容吧.下面,我们来为程序加入数据验证功能

asp.net怎么动态生成刻章

问题描述 asp.net怎么动态生成刻章 就是根据用户输入的内容生成刻章,难点不是在图片上加文字,而是文字沿着圆形曲线显示,多谢各位帮助.直接上图吧 解决方案 参考 Set Text on a Circle下载相应文件后,在页面中引用相关js文件(和jquery), 然后使用类似$(包含文字的html元素).lettering();就可以了. 解决方案二: 上面的答案有帮助吗?如果还有问题,请提出来,如果对答案满意,请顶一下,并标记为采纳答案,谢谢!

《精通Spring MVC 4》——2.3 Spring MVC 1-0-1

2.3 Spring MVC 1-0-1 在Spring MVC中,模型是由Spring MVC的Model或ModelAndView封装的简单Map.它可以来源于数据库.文件.外部服务等,这取决于你如何获取数据并将其放到模型中.与数据层进行交互的推荐方式是使用Spring Data库:Spring Data JPA.Spring Data MongoDB等. Spring MVC的控制层是通过使用@Controller注解来进行处理的.在Web应用中,控制器的角色是响应HTTP请求.带有@Co

走向ASP.NET架构设计第七章:阶段总结,实践篇(中篇)

服务层(中篇) 上一篇文章中,我们已经讲述了业务逻辑层和数据访问层层的设计和编码,下面我们就来讲述服务层的设计.如我们之前所讨论的:服务层想客户端暴露简单易用的API. 如下图所示: 在上图中: 1. ASPPatterns.Chap6.EventTickets.Contract: 这个类库中定义了服务层的接口契约. 2. ASPPatterns.Chap6.EventTickets.Service:这个类库中包含了上面接口契约的实现类以及业务逻辑的协调和数据的持久化和返回数据 3. ASPPa

七天学会ASP.NET MVC (一)——深入理解ASP.NET MVC

系列文章 七天学会ASP.NET MVC (一)--深入理解ASP.NET MVC 七天学会ASP.NET MVC (二)--ASP.NET MVC 数据传递 七天学会ASP.NET MVC (三)--ASP.Net MVC 数据处理 七天学会ASP.NET MVC (四)--用户授权认证问题 七天学会ASP.NET MVC (五)--Layout页面使用和用户角色管理  七天学会ASP.NET MVC (六)--线程问题.异常处理.自定义URL 七天学会ASP.NET MVC(七)--创建单页

一起谈.NET技术,走向ASP.NET架构设计——第四章—业务层分层架构(中篇)

在上一篇文章中,我们讨论了两种组织业务逻辑的模式:Transaction Script和Active Record.在本篇中开始讲述Domain Model和Anemic Model. Domain Model 在开发过程中,我们常常用Domain Model来对目标的业务领域建模.通过Domain Model建模的业务类代表了目标领域中的一些概念.而且,我们会看到通过Domain Model建模的一些对象模拟了业务活动中的数据,有的对象还反映了一些业务规则. 我们就来看看电子商务系统的开发,在

一起谈.NET技术,走向ASP.NET架构设计——第七章:阶段总结,实践篇(中篇)

服务层(中篇) 上一篇文章中,我们已经讲述了业务逻辑层和数据访问层层的设计和编码,下面我们就来讲述服务层的设计.如我们之前所讨论的:服务层想客户端暴露简单易用的API. 如下图所示: 在上图中: 1. ASPPatterns.Chap6.EventTickets.Contract: 这个类库中定义了服务层的接口契约. 2. ASPPatterns.Chap6.EventTickets.Service:这个类库中包含了上面接口契约的实现类以及业务逻辑的协调和数据的持久化和返回数据 3. ASPPa

《精通Spring MVC 4》——2.2 对MVC的质疑及其最佳实践

2.2 对MVC的质疑及其最佳实践 尽管MVC依然是当前设计UI的首选方案,但是随着它的流行,也有很多对它的批评.实际上,大多数的批评都指向了该模式的错误用法. 2.2.1 贫血的领域模型 Eric Evans编写过一本很有影响力的书,名为<领域驱动设计>(Domain Driven Design,DDD).在这本书中,定义了一组架构规则,能够指导我们更好地将业务领域集成到代码之中. 其中有一项核心的理念就是将面向对象的范式应用到领域对象之中.如果违背这一原则的话,就会被称之为贫血的领域模型(