【读书笔记】Node.js设计模式(第三版)
2023/11/30 23:40:372022/02/28 16:39:15
书名:《Node.js设计模式(第三版)》
作者:[爱尔兰]Mario Casciaro、[意]Luciano Mammino
译者:爱飞翔
出版社:中国电力出版社
出版日期:2021.8
这本书是关于什么的
- 传统设计模式与 Node.js 设计模式之间的区别,如何设计出只专注于一件事的模块。
- 一套设计模式,用以解决常见的 Node.js 设计问题与编程问题。
大纲
(可以是书的目录,在阅读本书的章节时在这个结构中做笔记。)
第 1 章 Node.js 平台
1.1 Node.js 开发理念
模块尽可能小:单一职责,暴露尽量少的接口。
1.2 Node.js 工作原理
- 事件循环
非阻塞式的 I/O 处理,通过绑定事件并添加回调函数的形式,在单线程上实现并发操作。
实际上并不是真正的并发,而是在事件循环中不断添加事件、处理事件。
当事件循环中没有事件时,node 应用就会退出。
1.3 Node.js 平台之中的 JavaScript
第 2 章 模块系统
2.1 为什么需要模块
2.2 JavaScript 与 Node.js 的模块系统
2.3 模块系统及其模式
2.4 CommonJS 模块
2.5 定义模块所用的模式
2.6 ECMAScript 模块(ESM)
2.7 ESM 与 CommonJS 之间的区别及交互使用技巧
第 3 章 回调与事件
API 必须设计成完全同步或完全异步,避免出现一个函数内部有可能是同步执行也有可能异步执行这种情况。
3.1 Callback(回调)模式
3.2 Observer(观察者)模式
第 4 章 利用回调实现异步控制流模式
4.1 异步编程所遇到的困难
避免当场定义回调逻辑(在函数内部定义函数并执行),这样会让代码结构变得混乱,越写越多,难以维护。
但这实际上是一个能不能遵守编程规范的问题,而不是异步编程特有的问题。
我们应当及时察觉这种问题,并拿出合适的解决方案,以阻止这种趋势。
4.2 设计回调的编程技巧与控制流模式
4.2.1 编写回调逻辑时应遵循的原则
- 定义回调函数时,不要滥用原地定义的函数。
- 尽早退出,用
return
、break
之类的语句及时停止函数,而不是编写完整的if...else
语句,这样可以让代码层次少一点。 - 用带有名称的函数表示回调逻辑,并且把这些函数写在闭包外面,如果需要传递中间结果,就通过参数传递。
- 提高代码的模块化程度,把代码分成小且可复用的函数。
第 5 章 利用 Promise 与 async/await 实现异步控制流模式
5.1 Promise
5.2 async/await
5.3 无线递归的 Promise 解析链所引发的问题
第 6 章 用 Stream 编程
6.1 理解 stream 在 Node.js 平台中的重要作用
为什么流模式比缓冲模式更高效?
- 流模式下,数据分段发送、接收、处理,缓冲模式需要把所有数据都存到缓冲区,再进行发送,消费端完整接收数据后进行处理。
- 流模式下,只要下一个数据能够使用,它就立刻开启一条并行的生产线开始处理数据,而不用等上个数据处理完毕,Node 内部会保证这些数据块按照顺序到来。
6.2 开始学习 Stream
6.3 用 stream 实现异步控制流模式
6.4 管道模式
第 7 章 创建型的设计模式
7.1 Factory(工厂)模式
将创建对象的过程封装,只暴露一个创建对象的方法。
在扩展对象类型、按运行环境对对象进行特殊处理时比较有用。
7.2 Builder(生成器/建造者)模式
7.3 Revealing Constructor 模式
在创建对象时允许访问某些私密的功能。
7.4 Singleton(单例/单件)模式
7.5 管理模块之间的依赖关系
第 8 章 结构型的设计模式
8.1 Proxy(代理)模式
8.2 Decorator(修饰器)模式
8.3 Proxy(代理)模式
8.4 Adapter(适配器)模式
第 9 章 行为型的设计模式
9.1 Strategy(策略)模式
9.2 State(状态)模式
9.3 Template(模板)模式
9.4 Iterator(迭代器)模式
9.5 Middleware(中间件)模式
9.6 Command(命令)模式
第 10 章 用 Universal JavaScript 开发 Web 应用程序
10.1 让 Node.js 与浏览器共用一套代码
10.2 跨平台开发的基础知识
10.3 React 简介
10.4 创建 Universal JavaScript 应用程序
第 11 章 高级技巧
11.1 如何应对初始化过程中需要执行异步任务的组件
11.2 批量处理异步请求并缓存处理结果
11.3 取消异步操作
11.4 运行 CPU 密集型任务
第 12 章 用加缪模式实现扩展
12.1 浅谈如何扩展应用程序
12.2 克隆与负载均衡
12.3 分解复杂的应用程序
第 13 章 消息传递与集成模式
13.1 消息传递系统的基础知识
13.2 Publish/Subscribe(发布/订阅)模式
13.3 任务分配模式
13.4 Request/Reply(请求/响应)模式
总结
概括
(用你自己的话写一个摘要来证明你理解这本书的意思。)
评论
- 在你完成大纲和对本书的解释之前不要开始批评(不要说你同意、不同意或暂停判断,直到你可以说“我理解”)
- 如果你不理解某件事,那么你就无法合理地判断它。
- 不要无缘无故地争论。