零、前言

JavaScript 开始成为世界上最流行的语言之一。 然而,它作为一种玩具语言的历史意味着开发人员容易忽视好的设计。 设计模式是建议一些经过良好尝试的解决方案的好工具。

这本书的内容

这本书分为两个主要部分,每个部分都包含一些章节。 本书的前半部分,我们将称为第 1 部分,涵盖了经典的设计模式,这些模式都在 GoF 的书中找到。

第 1 章介绍了什么是设计模式,以及为什么我们对使用设计模式感兴趣。 我们还将讨论一些 JavaScript 的历史,以便为您提供一个历史背景。

第二章组织代码,介绍了如何创建用于组织代码、命名空间或模块和类的经典结构,因为 JavaScript 缺乏这些结构作为一级公民。

第三章创造模式,涵盖了四人帮书中概述的创造模式。 我们将讨论这些模式如何应用于 JavaScript,而不是四人帮写书时流行的语言。

第四章结构模式,探讨创造模式。 我们将研究四人帮书中的结构模式。

第五章行为模式 这些是我们将要研究的“四人帮”书中的最后一组模式。 这些模式控制将类链接在一起的不同方式。

第 2 部分着眼于 GoF 书中没有涉及的模式,或者是 JavaScript 特有的模式。

第 6 章函数式编程,涵盖了函数式编程语言中的一些模式。 我们将了解如何在 JavaScript 中使用这些模式来改进代码。

第 7 章反应式编程探讨了 JavaScript 中与回调模型相关的问题。 它提出了响应式编程(一种基于流的事件处理方法)作为一种可能的解决方案。

第 8 章应用模式,探讨了创建单页应用的各种令人困惑的不同模式。 我们将清晰地介绍如何使用使用每个现有模式的库,以及如何创建我们自己的轻量级框架。

第 9 章Web Patterns,介绍了一些特定的 Web 应用模式。 我们还将研究一些关于将代码部署到远程运行时(如浏览器)的模式。

第 10 章消息模式,介绍了消息是如何在应用内部甚至在应用之间进行通信的强大技术。 在本章中,我们将研究一些围绕消息传递的常见结构,并讨论消息传递为什么如此有用。

第 11 章微服务(Microservices)。 本章探讨了这种编程方法背后的思想,并建议在使用这种方法构建时要记住一些模式。

第 12 章测试模式,讨论了如何构建软件是困难的,以及如何构建好的软件是更加困难的。 本章提供了一些模式,可以使测试过程稍微容易一些。

第 13 章高级模式,解释了一些模式(如面向方面编程)如何很少应用于 JavaScript。 我们将看看如何在 JavaScript 中应用这些模式,并讨论是否应该应用它们。

第 14 章ECMAScript-2015/2016 Solutions Today,涵盖了一些可用的工具,允许您使用 JavaScript 的未来版本的功能。 我们将研究微软的 TypeScript 和 Traceur。

你写这本书需要什么

这本书不需要专门的软件。 JavaScript 可以在所有现代浏览器上运行。 有用 c++ (V8)和 Java (Rhino)编写的独立 JavaScript 引擎,它们被用于支持各种工具,如 Node.js、CouchDB,甚至 Elasticsearch。 这些模式可以应用于任何这些技术。

这本书是给谁的

本书是 JavaScript 开发人员的理想选择,他们希望通过 JavaScript 和 ES-2015 的新功能获得面向对象编程的专业知识,以提高他们的 web 开发技能,并构建专业质量的 web 应用。

会议

在本书中,您将发现许多文本样式,它们可以区分不同类型的信息。 下面是这些风格的一些例子和它们的含义的解释。

文本中的代码字、数据库表名、文件夹名、文件名、文件扩展名、路径名、虚拟 url、用户输入和 Twitter 句柄如下所示:“您将注意到,我们显式定义了name字段。”

代码块的设置如下:

let Castle = function(name){
 this.name = name;
}
Castle.prototype.build = function(){ console.log(this.name);}
let instance1 = new Castle("Winterfell");
instance1.build();

当我们希望您注意代码块的特定部分时,相关的行或项以粗体显示:

let Castle = function(name){
 this.name = name;
}

Castle.prototype.build = function(){ console.log(this.name);}

let instance1 = new Castle("Winterfell");
instance1.build();

命令行输入或输出如下所示:

ls -1| cut -d \. -f 2 -s | sort |uniq

新词语重要词语以粗体显示。 你在屏幕上看到的话,例如,在菜单或对话框,出现在这样的文字:“访问它们有一个菜单项,坐落在【T5 工具 】 | 在 Chrome【T7 开发工具 】 | 【T9 的工具 】 | Web 开发人员在 Firefox。”****

注释

警告或重要注释出现在这样的框中。

提示

提示和技巧是这样的。

读者反馈

我们欢迎读者的反馈。 让我们知道你对这本书的看法——喜欢或不喜欢。 读者反馈对我们来说很重要,因为它可以帮助我们开发出你真正能够从中获得最大收益的游戏。

要向我们发送一般的反馈,只需发送电子邮件<[feedback@packtpub.com](mailto:feedback@packtpub.com) >,并在邮件的主题中提及书名。

如果你对某一主题有专长,并且你对写书或投稿感兴趣,请访问www.packtpub.com/authors查看我们的作者指南。

客户支持

现在,您是包书的骄傲所有者,我们有一些东西来帮助您从您的购买中获得最多。

下载示例代码

你可以从你的账户http://www.packtpub.com下载这本书的示例代码文件。 如果您在其他地方购买了这本书,您可以访问http://www.packtpub.com/support并注册,直接将文件通过电子邮件发送给您。

您可以按照以下步骤下载代码文件:

  1. 使用您的电子邮件地址和密码登录或注册我们的网站。
  2. 将鼠标悬停在顶部的SUPPORT标签上。
  3. 点击代码下载&勘误表
  4. 搜索框中输入书的名字。
  5. 选择要下载代码文件的书。
  6. 从下拉菜单中选择您购买这本书的地方。
  7. 点击代码下载

你也可以在 Packt Publishing 网站上点击该书网页上的code files按钮下载代码文件。 在搜索框中输入书名即可进入本页。 请注意,您需要登录到您的包帐户。

文件下载后,请确保使用最新版本的:

  • WinRAR / 7-Zip for Windows
  • Zipeg / iZip / unarx 适用于 Mac
  • 7-Zip / PeaZip for Linux

本书的代码包也托管在 GitHub 上的https://github.com/PacktPublishing/Mastering-JavaScript-Design-Patterns-Second-Edition。 我们也有来自丰富的图书和视频目录的其他代码包,可以在https://github.com/PacktPublishing/上找到。 检查出来!

勘误表

尽管我们已经尽一切努力确保内容的准确性,但错误还是会发生。 如果您在我们的任何一本书中发现了错误——也许是文本或代码中的错误——如果您能向我们报告,我们将非常感激。 通过这样做,您可以避免其他读者感到沮丧,并帮助我们改进本书的后续版本。 如果您发现任何勘误表,请访问http://www.packtpub.com/submit-errata,选择您的书,点击勘误表链接,并输入勘误表的详细信息。 一旦您的勘误表得到验证,您的提交将被接受,勘误表将被上传到我们的网站,或添加到该标题勘误表部分的任何现有勘误表列表中。

要查看之前提交的勘误表,请到https://www.packtpub.com/books/content/support,并在搜索栏中输入书名。 所需信息将出现在勘误表部分下。

盗版

在互联网上盗版有版权的材料是所有媒体都存在的问题。 在 Packt,我们非常重视版权和许可的保护。 如果您在互联网上发现任何形式的我们作品的非法拷贝,请立即提供我们的地址或网站名称,以便我们采取补救措施。

请在<[copyright@packtpub.com](mailto:copyright@packtpub.com) >联系我们,并提供疑似盗版资料的链接。

我们感谢您的帮助,以保护我们的作者和我们的能力给您带来有价值的内容。

问题

如果你对这本书的任何方面有问题,你可以通过<[questions@packtpub.com](mailto:questions@packtpub.com) >联系我们,我们会尽力解决这个问题。