《精通 ASP.NET MVC 3 框架(第三版)》---- 1.2 当今的Web开发

简介: 除微软之外,自Web Form首次发布以来,Web开发技术发展迅速,这表现在几个不同的方向。除了已经提及的AJAX之外,还有一些其他的主要发展。

本节书摘来自异步社区《精通 ASP.NET MVC 3 框架(第三版)》一书中的第1章,第2节,作者: 【美】Adam Freeman , Steven Standerson,译者: 林逸 , 李萍 , 更多章节内容可以访问云栖社区“异步社区”公众号查看。

1.2 当今的Web开发

精通 ASP.NET MVC 3 框架(第三版)
除微软之外,自Web Form首次发布以来,Web开发技术发展迅速,这表现在几个不同的方向。除了已经提及的AJAX之外,还有一些其他的主要发展。

1.2.1 Web标准与REST

近些年来,向Web标准兼容的趋势已在增强。Web网站建立在比以往更广泛的设备和浏览器之上,Web标准(HTML、CSS、JavaScript等)使人们有望能够在任何地方——甚至在可联网的冰箱上——都可以有相当好的浏览体验。现代Web平台不可忽视这种商业环境和开发者对顺应Web标准的追求。

与此同时,表现式状态传输(Representational State Transfer,REST)已经成为应用程序在HTTP上互操作的主要体系结构,完全使SOAP(ASP.NET原先进行Web服务的支撑技术)黯然失色。REST根据表示真实世界实体的资源(URI)和表示在这些资源上可用的标准操作(HTTP方法)来描述一个应用程序。例如,你可能会PUT(传递)一个新的http://www.example.com/Products/Lawnmower (含义为递交一台除草机。——译者注),或DELETE(删除)http://www.example.com/Customers/Arnold-Smith (删除某人)。(这两个例子的含义为,通过HTTP方法与请求网址的组合就可以执行相应的操作,而这种HTTP方法与资源地址的组合就是REST。——译者注)

当今的Web应用程序不只服务于HTML,通常也必须把JSON或XML数据提供给各种客户端技术,包括Ajax、Silverlight以及本地智能手机应用程序。利用REST,做这些事情会很自然。REST消除了之前Web服务与Web应用程序之间的差异——但这需要一种对HTTP和URL进行处理的办法,而这种办法难以得到ASP.NET Web Form的支持。

1.2.2 敏捷与测试驱动开发

在过去的十多年中,不只Web开发得到了发展——整个软件开发行业也朝着敏捷方法学方向前进。这可能包含许多不同的事情,但主要是指将软件项目的实施视为一种适应性的探索过程,以消除超前规划的阻碍和限制。敏捷方法学热衷于将一组特定的开发实践与促进和辅助这些实践的工具(通常是开源的)结合在一起。

测试驱动开发(TDD,Test-Driven Development)及其最新的化身,行为驱动开发(BDD,Behavior-Driven Development),是两个突出的例子。其思想是,通过首先描述想要得到的行为范例(称为测试或规范)来设计软件,因此,任何时候都可以执行依附于这一实现的一套规范,来验证应用程序的稳定性和正确性(在TDD/BDD开发中,你的软件是根据测试规范而实现的。于是,这套测试便可以随时用来验证你的这一实现——译者注)。.NET支持TDD/BDD的工具并不缺乏,但它们几乎都不能与Web Form很好地工作。

单元测试工具让你可以规定个别类或其他孤立的小型代码单元的行为。只有将软件设计成一个个独立的模块,才能有效地运用这些工具,以使得每个测试可以独立地运行。遗憾的是,Web Form应用程序很少能够以这种方式进行测试。根据(Web Form的)框架指南,要把逻辑放到事件处理程序中,乃至使用直接查询数据库的服务器控件,开发者往往需要将应用程序逻辑与Web Form的运行时环境紧紧地耦合在一起。这是不能进行单元测试的死结。
UI自动化工具让你能够根据应用程序的一个完整的运行实例来模拟一系列用户交互。理论上,这些工具可以用于Web Form,但当你对页面布局作微小改动时,它们都可能会崩溃。稍有差错,Web Form就会生成完全不同的HTML结构和元素的ID值,导致正在使用的测试套件失效。
.NET开源和独立的软件开发商(ISV)团体已经生产了无数顶级质量的单元测试框架(NUnit、xUnit)、模仿框架(Moq、Rhino Mocks)、控制反转容器(Ninject、AutoFac)、持续集成服务器(Cruise Control、TeamCity)、对象关系映射工具(NHibemate、Subsonic)等。这些工具和技术的支持者们都已达成一致意见,在共享品牌ALT.NET上发布并组织会议。传统的ASP.NET Web Form因其单片式设计(指用户界面及其处理逻辑被耦合在一起的设计方式。——译者注),而不适用于这些工具和技术。因此,Web Form没能得到专家组和行业思想领导者起码的尊重。

1.2.3 Ruby on Rails

2004年,Ruby on Rails还默默无闻,只是一个无名倡导者的开源项目。然而,它突然声名鹊起,转变了 Web 开发的规则。并不是因为它包含了革命性的技术,而在于其概念利用了已有的技术,并把它们以一种有说服力且吸引人的方式融合在一起,而使现有平台相形见绌。

Ruby on Rails(或通常所说的Rails)采纳了一种“模型—视图—控制器”架构。通过运用MVC架构并遵守HTTP协议,提倡约定优于配置,并将对象—关系映射(ORM)工具集成到它的内核,Rails应用程序几乎无需太多努力就可以建成。就好像Web开发一直以来就应该是那样,好像我们突然意识到,这些年来我们一直在进行工具奋战(在制作一些其实不需要的工具——译者注),而现在,一切都结束了。

Rails表明,顺应Web标准和REST化并不困难。它也表明,当框架支持敏捷开发与TDD时,它们工作起来是最好的。从那时起,整个Web开发世界都被调动起来了。

1.2.4 Sinatra

由于Rails,很快就有很多Web开发者以Ruby作为他们的主要编程语言了。但在当今这样一个有强烈创新意识的社会中,出现Rails的替代版本只是时间问题。2007年,最著名的Sinatra问世了。

Sinatra摒弃了几乎所有标准的Rails风格的基础架构(路由、控制器、视图等),而仅仅把URL模式映射到Ruby代码块。访问者请求一个URL,这会引起执行一个Ruby代码块,并把数据回送给浏览器。这是一个非常简单的Web开发形式,但Sinatra只在两个主要方面找到了潜力利基(利基,一种小范围但很有作为的环境——译者注)。首先,对于那些建立REST化的Web服务,它恰好能够快速完成工作(第14章会简单涉及REST);其次,由于Sinatra可以连接广泛的开源HTML模板和ORM技术,通常以此为基础来装配一个自定义的Web框架,就可以适应手头各种项目的体系结构需求。

Sinatra尚未在Rails(或ASP.NET MVC)等全堆栈MVC平台中占据重要的市场份额。这里简单地提到它,只是想说明Web开发行业正在朝着简化的方向发展,也因为Sinatra起到对抗其他框架(甚至聚集了更核心的特性)的作用。

1.2.5 Node.js

Web开发技术另一个明显的趋势是朝着以JavaScript作为主要编程语言的方向发展。Ajax首先展示了JavaScript是重要的,jQuery展示了它功能强大而雅致的特性,而Google的开源V8 JavaScript引擎则展示了它难以置信的速度。如今,JavaScript正在成为一种重要的服务器端编程语言。它为一些非关系型数据库,包括CouchDB和Mongo等,提供数据存储和查询语言服务,并被用作服务器端平台的一种通用语言,如Node.js。

Node.js于2009年出现,并很快得到了广泛的认可。从体系结构上来看,它类似于Sinatra,因为它不采用MVC模式,而是以更低级的方式把HTTP请求连接到代码。其关键创新有以下几点。

使用JavaScript:开发者只需要使用一种语言,从客户端代码到服务器端逻辑,甚至到CouchDB或之类的数据查询逻辑都可以实现。
完全异步:在等待输入/输出(I/O)或任何其他操作时,Node.js的API根本不会显露出任何形式的线程阻塞。通过启动其操作,然后在该I/O完成时接收一个回调便实现一个完整的I/O操作。这意味着,Node.js实现了非常有效的系统资源利用,使得每个CPU可处理数以万计的并发请求(其他平台只能期望把每个CPU的并发请求限制在100左右)。
同Sinatra一样,Node.js是一种利基技术。在有时间限制的情况下,建立实际应用程序的大多数事务一般都需要用到诸如Ruby on Rails、ASP.NET MVC等完整堆栈框架下的所有基础架构。这里提到Node.js,只是把ASP.NET MVC的某些设计放在行业趋势的大背景下讨论。例如,ASP.NET MVC包含了异步控制器(我们将在第14章中进行介绍),这就是一种以非阻塞I/O处理HTTP请求,并提高每CPU处理更多请求的方式。正如你将要了解到的,ASP.NET MVC很好地集成了运行在浏览器端的成熟的JavaScript代码(将在第18、19、20章介绍)。

本文仅用于学习和交流目的,不代表异步社区观点。非商业转载请注明作译者、出处,并保留本文的原始链接。

相关文章
|
1天前
|
开发框架 安全 前端开发
使用Ruby on Rails进行快速Web开发
【5月更文挑战第27天】Ruby on Rails是一款基于Ruby的高效Web开发框架,以其快速开发、简洁优雅和强大的社区支持著称。遵循“约定优于配置”,Rails简化了开发流程,通过MVC架构保持代码清晰。安装Ruby和Rails后,可使用命令行工具创建项目、定义模型、控制器和视图,配置路由,并运行测试。借助Gem扩展功能,优化性能和确保安全性,Rails是快速构建高质量Web应用的理想选择。
|
2天前
|
前端开发 开发者 UED
CSS能力是Web开发中不可或缺的技能
【5月更文挑战第26天】CSS能力是Web开发中不可或缺的技能
10 3
|
3天前
|
敏捷开发 设计模式 负载均衡
探索现代Web开发中的微服务架构
【5月更文挑战第25天】 随着数字化转型的深入,Web应用变得越来越复杂多变。传统的单体架构因其耦合度高、扩展性差等限制,已难以满足快速迭代与灵活部署的需求。本文将深入探讨微服务架构在现代Web开发中的应用,解析其设计原则、核心组件以及如何通过微服务提升系统的可维护性和可扩展性。我们将从理论到实践,展示微服务如何优化资源利用,实现敏捷开发和持续集成,并最终为企业带来竞争优势。
|
4天前
|
Java 应用服务中间件 Apache
Tomcat的基本使用,如何用Maven创建Web项目、开发完成部署的Web项目
Tomcat的基本使用,如何用Maven创建Web项目、开发完成部署的Web项目
15 1
|
4天前
|
前端开发 JavaScript Java
JAVA Web开发入门与实战
本文引导读者入门JAVA Web开发,介绍了Web开发的基本概念,如Servlet、JSP和JavaBean,并详细阐述了JAVA Web开发环境的搭建。文章通过一个在线书店系统的实战项目,展示了从需求分析、数据库设计到前后端开发的全过程,涵盖Servlet处理请求、JSP动态生成页面及表单添加书籍功能。最后,文章提及了进阶技术,如框架使用、前端集成和安全性考虑,鼓励读者深入探索JAVA Web开发的广阔世界。
|
5天前
|
缓存 应用服务中间件 数据库
Python Web Service开发及优化
随着互联网的快速发展,Web服务已成为现代技术的核心。Python作为一种功能强大且易于学习的编程语言,在Web服务开发领域占据着重要地位。Python Web服务开发的重要性在于它能够提供高效、可扩展且易于维护的解决方案。本篇博客将探讨如何使用Python的Flask框架、Gunicorn WSGI服务器和Nginx网页服务器来实现高性能的Web服务。
|
8天前
|
缓存 API 数据库
构建高效Python Web应用:Flask框架与RESTful API设计原则
【5月更文挑战第20天】 在现代Web开发中,构建一个轻量级且高效的后端服务至关重要。本文将深入探讨如何使用Python的Flask框架结合RESTful API设计原则来创建可扩展和易于维护的Web应用程序。我们将通过分析Flask的核心特性,以及如何利用它来实现资源的合理划分、接口的版本控制和请求处理优化等,来指导读者打造高性能的API服务。文中不仅提供了理论指导,还包括了实践案例,旨在帮助开发者提升开发效率,并增强应用的稳定性和用户体验。
|
8天前
|
存储 人工智能 前端开发
从前端到后端,探索Web开发的奥秘
Web开发是当今最热门的技术领域之一,涉及前端、后端、数据库等多个方面。本文将介绍Web开发的基本架构和技术要点,并深入探讨前后端交互、安全性等问题,帮助读者更好地理解Web开发的奥秘。
|
9天前
|
Kubernetes 前端开发 JavaScript
未来Web开发的趋势与挑战
随着科技的不断发展,Web开发行业也在不断演进。本文将探讨未来Web开发的趋势和面临的挑战,涵盖了前端、后端以及多种编程语言和数据库相关的技术。
|
10天前
|
缓存 监控 安全
Django框架在大型Web应用中的架构设计与实战
【5月更文挑战第18天】Django框架在构建大型Web应用中扮演重要角色,采用分层架构(数据、业务逻辑、表示层)和多应用组织模式,结合缓存策略(如Memcached、Redis)提升性能。通过异步处理、分布式部署提高响应速度和扩展性。关注数据分区、安全设计及监控日志,确保系统高效、稳定。Django为复杂业务提供坚实基础,助力打造卓越Web系统。
40 7