本书是一本关于复杂Ajax应用的整体架构设计的图书。好的架构设计应该满足KISS的原则,容易理解和学习、开发效率高、容易维护和扩展。在各种必须要满足的约束条件之下,设计出一个最简化的架构是架构师孜孜不倦追求的目标。幸运的是,经过国外高水平的Web开发专家的探索,这样的架构设计已经有了一套行之有效的模式。这些模式都是围绕着REST的思想来设计的。RIA+REST将会成为继Web MVC之后,新一代Web应用的首选架构风格。\r\n 本书是国内出版的第一本深入探讨REST架构设计的书籍。书中的所有模式都有详细的讲解和丰富的代码,理论联系实践,确实是不可多得的一本好书。
序 \r\n第一部分 序曲 \r\n 第1章 Ajax简介 \r\n Ajax与可用性良好的的Web应用 \r\n Ajax的崛起 \r\n 将Web应用Ajax化:Portal的故事 \r\n 将桌面应用Web化:Office应用的故事 \r\n Ajax应用的特性 \r\n Ajax技术 \r\n 服务器调用之剖析 \r\n Ajax的趋势 \r\n 结论 \r\n 第2章 由模式引导的教程 \r\n Ajax技术概述 \r\n 将Web应用Ajax化:一次一个模式 \r\n 项目与实践 \r\n 结论 \r\n 第3章 Ajax设计:原则与模式 \r\n Ajax应用应该具备的属性 \r\n 为Ajax做设计 \r\n Ajax模式概览 \r\n 剖析模式说明格式 \r\n Ajax模式的演示 \r\n 结论 \r\n第二部分 基础技术设计模式 \r\n 第4章 Ajax应用 \r\n Ajax应用 \r\n 第5章 显示操作 \r\n 显示变形 \r\n 页面重新布置 \r\n 第6章 Web远程通信 \r\n Web服务 \r\n XMLHttpRequest调用 \r\n IFrame调用 \r\n HTTP信息流 \r\n 随需下载的JavaScript \r\n 第7章 动态行为 \r\n 用户动作 \r\n 计划 \r\n 第8章 扩展技术 \r\n 富媒体插件 \r\n第三部分 编程模式 \r\n 第9章 Web Services \r\n RESTful服务 \r\n RPC服务 \r\n Ajax Stub \r\n HTML信息 \r\n 纯文本信息 \r\n XML信息 \r\n JSON信息 \r\n 第10章 浏览器-服务器对话 \r\n 调用跟踪 \r\n 定期刷新 \r\n 提交次数限制 \r\n 明确提交 \r\n 分布式事件 \r\n 跨域代理 \r\n 第11章 DOM组装 \r\n XML数据岛 \r\n 浏览器端的XSLT \r\n 浏览器端模板 \r\n 第12章 代码生成与重用 \r\n 服务器端代码生成 \r\n 跨浏览器组件 \r\n 第13章 性能优化 \r\n 浏览器端缓存 \r\n 预先获取 \r\n 推测估计 \r\n 多阶段下载 \r\n 胖客户端 \r\n第四部分 功能性与可用性模式 \r\n 第14章 小组件 \r\n 滑动条 \r\n 进度指示器 \r\n 分级下拉菜单 \r\n 数据表格 \r\n 富文本编辑器 \r\n 输入提示 \r\n 动态搜索 \r\n 动态命令行 \r\n 动态表单 \r\n 第15章 页面架构 \r\n 拖放 \r\n 小精灵 \r\n 弹出框 \r\n 可改变的内容 \r\n 微连接 \r\n Portlet \r\n 状态区域 \r\n 更新控制 \r\n 虚拟工作空间 \r\n 第16章 视觉效果 \r\n 一秒钟聚光灯 \r\n 一秒钟变形 \r\n 一秒钟移动 \r\n 突出显示 \r\n 第17章 功能性 \r\n 延迟注册 \r\n 直接登录 \r\n 防主机端保存 \r\n 超时机制 \r\n 心跳检测 \r\n 唯一URL \r\n第五部分 开发模式 \r\n 第18章 诊断 \r\n 日志 \r\n 调试 \r\n DOM查看 \r\n 流量嗅探 \r\n 第19章 测试 \r\n 模拟服务 \r\n 浏览器端测试 \r\n 服务测试 \r\n 系统测试 \r\n第六部分 附录 \r\n 附录A Ajax框架和库 \r\n 附录B 设置代码范例 \r\n 附录C 模式和模式语言 \r\n 附录D 参考文献 \r\n 索引
麦赫马夫(Michael Mahemoff),已经在软件业工作了22年,包括10年的商业经验。他在墨尔本大学获得了计算机科学和软件工程的哲学博士(Ph.D)学位,他的论文是“软件工程中的设计重用和人机交互”。他居住在伦敦,为银行、卫生保健、后勤等行业做软件开发问题的技术咨询。Micheal的blog与在线项目可从他的主页中链接到——http://mahemoff.com/。
对于想要知道 Ajax 正被如何应用到现实世界的开发者、设计者和经理人,《Ajax设计模式》无疑是为他们量身打造的一份参考资料。Ajax 是一个新名词,描述行为丰富、类似桌面应用的 Web 应用,这些应用执行在标准的Web浏览器上,而不需要安装任何特别的插件。它的风行与普及,归功于一些众所瞩目的 Ajax 应用,例如 Gmail、Google Maps和37signals的Basecamp。在企业应用中,Ajax也越来越受欢迎。
本书的模式分成 4 类。基础技术(Foundational Technology)模式概述了 Ajax 开发所需要的原始技术,例如 XMLHttpRequest 对象。编程(Programming)模式探索开发者所发现的一些技术,这些技术可以确保他们的 Ajax 应用易于维护且性能良好。功能性和可用性(Functionality and Usability)模式讨论将在Ajax应用中遇到的,以及 Ajax 使其成为可能的用户界面。最后,开发(Development)模式阐述了用来监控、调试,以及测试 Ajax 应用的过程。
谁该阅读这本书
Who should Read This Book
如果想要达到以下目的,你应该阅读这本书:
了解 Ajax 能做什么,不能做什么,以及正如何被使用在现实世界里。
加速理解 Ajax 的核心技术,例如XMLHttpRequest、DOM,以及JSON等。
发现开发者用来产生高质量的Ajax架构、改善性能,以及改善可用性的模式。
因为模式本身就是用来参考的,各种背景的读者都可以理解。想在Ajax领域快速提升的开发者,可以从教程的章节(第2章)及基础技术模式开始。已经有些 Ajax 开发经验的人,可以从编程模式和开发模式中获益良多。非技术领域的人,可以以高层的观点,特别是考察功能性和可用性模式以及它们在真实世界中的例子,来看看Ajax能做什么。
为了领会书中的技术性讨论与程序代码范例,程序员应该对网页开发有一定的经验—— HTML、表单提交、服务器端脚本,等等。读者最好也了解一些 JavaScript,因为这本书不是来教你这门编程语言的。但是本书在写作时,作者确实考虑到了很多读者对 JavaScript 只是基本的了解。
Ajax 主要是关于发生在浏览器里的事,因此本书假设你不知道任何特定的服务器端环境。在那些涉及服务器端代码的地方,范例基本上都是以PHP作基础,并且用语言中立(language-neutral)的术语来作解释。
谁不该阅读这本书
Who should Not Read This Book
如果你没有从事过任何网页开发的工作,在一头栽进Ajax和这些模式之前,或许应该找些基础概念的介绍来看看会更好。
Ajax 开发涉及大范围的技术领域,包括 HTML、XML、CSS、JavaScript 和服务器端开发。这本书将帮助你理解 Ajax与这些技术的每一项是如何关联的,通常是如何相结合的。但是,如果你指望彻底学习这些技术中的任何一项,或者你正在寻求有关浏览器细节的参考,建议你查阅更加专业的参考资料。
关于范例
About the Examples
本书的所有范例(教程代码与Ajax模式的代码)都可以从http://ajaxify.com/run上下载。它们已经被开发成与新近版本的Firefox和IE兼容的代码,并且在Firefox
1.5和IE 6.0[注1]上通过了测试。多数服务器端代码需要PHP 5或更新的版本,并在PHP 5.0.4上也通过了测试。PHP程序代码应该运行在任何能执行PHP脚本的标准Web服务器上;Apache 1.3.33被用于本书范例的测试。Wiki的演示需要MySQL,并且在4.1.14-max 的版本上能通过测试。关于如何安装演示的信息,请参阅附录B。
浏览器细节
Browser Specifics
实际上对Ajax的目的来说,所有的Ajax模式都能在任何现代的标准浏览器上实现,讨论的焦点应侧重于一般性架构与可用性的问题,而不是浏览器的细节。但是,可移植性(portability)的问题确实出现在了某些例子中,并且在对实现模式具有关键性影响的地方也作了说明(如同本书第二部分,基础技术模式的某些主题中所做的)。为了不模糊焦点,多数讨论仍局限于IE和Firefox;描绘每个浏览器和版本的风格与手法,超出了模式所要讨论的范围,对此,建议你参考更加专业的资料。
本书的组织
Organization of This Book
第一部分,序曲
最初几章是所有模式的序曲。Ajax简介(第1章)概述了Ajax现象并讨论当前的趋势。由模式引导的教程(第2章)是Ajax与Ajax模式的教学课程。Ajax模式背后的设计理念则在Ajax设计:原则与模式(第3章)中讨论,并伴随了模式本身的介绍。
第二部分,基础技术模式
基础技术模式描绘了任何 Ajax 应用的核心“建造模块”(building blocks)。Ajax本身是一种模式,因此作为第一个模式,Ajax 应用(第4章)扮演了所有 Ajax 模式的基础。接下来几章探讨创建 Ajax 应用所涉及的 3 项核心技术。显示操作(第5章)讨论用户界面的重绘,Web Remoting(第6章)整理了几种与服务器通信的做法。动态行为(第7章)讨论事件——所有衍生自用户或定时机制的事件。最后,扩展技术(第8章)解释如何以非标准的技术来扩展 Ajax 应用。
第三部分,编程模式
编程模式聚焦于软件的技术性质量,特别是可维护性、稳定性,以及效能。这部分的第1个章节,即第9章,提供了几种设计 Web Service 的策略。此外,与 Web Remoting 相关,浏览器-服务器对话(第10章)探讨浏览器与服务器间的信息流,例如,同步技术。DOM 组装(第11章)涵盖几项策略,处理继服务器响应之后的DOM 组装(DOM population)。代码生成与重用(第12章)包含了几个实现可维护性与可移植性(portability)的通用编程模式。最后,性能优化(第13章)不仅讨论了提高更新与通信的速度,也讨论了为无法避免的延迟优化用户的体验。
第四部分,功能性与可用性模式
功能性和可用性模式着重于 Ajax 应用的可用性。小组件(第14章)介绍一些被整合进很多 Ajax 界面的小组件。页面架构(第15章)讨论了较高层次的观点,其中的焦点是页面布局、内容分解,以及暴露服务器端的内容。随着Ajax的普及,因特网正经历一场视觉效果的提升,这对传统的桌面应用系统是前所未有的;最常见的视觉效果将在“视觉效果”(第16章)中描述。这个部分的最后一章,功能性(第17章)讨论了Ajax使之成为可能的几种新功能。
第五部分,开发模式
开发模式不是你在 Ajax 应用中看到的“具体事物”——不像前面几个部分中的模式——而是能够用来辅助你开发的过程。诊断分析(第18章)协助进行疑难排查(troubleshooting),以及监测 Ajax 应用程序的运行状态。测试(第19章),在各个不同的层次上协助进行测试工作,而且是建立在随应用的演进而逐步测试的敏捷实践(agile practice)的基础之上的。
第六部分,附录
共有4个附录。附录A,最大的附录,是一个Ajax相关框架和库的清单,其中很多对实现本书中的模式大有帮助。附录B是一组安装代码范例的说明。附录C介绍模式的一般性理论。最后,附录D列出了本书所参考的相关资料。
本书的格式约定
Conventions Used in This Book
斜体
用来表示模式名称。
等宽字体
用来表示程序范例或片段。
等宽粗体
用来表示重要的代码。
“浏览器”这个词,是浏览器端整个系统的简化表示——不只是浏览器应用(例如Firefox),还包括运行在上面的Web应用(例如 Google Maps)。当特指浏览器应用时,通常会把它称为“Web浏览器”——无论如何,从上下文来看,这是相当明显的。同样地,“服务器”或“服务器端”指的是服务器上的所有东西——操作系统(例如Linux),Web服务器(例如Apache),以及运行在上面的特定于应用的脚本。
“ECMAScript”和“JScript”这两个词并未出现在本书中,“JavaScript”被用来涵盖这些名称。
“类”这个词,被用来描述以类似面向对象系统中类的方式使用的 JavaScript 函数。
出现在每个模式里的第一个图形,是该模式的图解。
本书所使用的公共首字母缩略词如下所示:
CSS:层叠式样式表(Cascading Style Sheets)。
DHTML:动态 HTML(Dynamic HTML)。
DOM:文档对象模型(Document Object Model)。
HTML:超文本标记语言(Hypertext Markup Language)。
IE:微软 Internet Explorer 。
XML:可扩展标记语言(eXtensible Markup Language)。
代码范例的格式约定
Conventions in Code Examples
设计图解基于统一建模语言(UML)表示法,但在多数情况下,这并不是很正式。
在代码范例中,.p
无封面