Node.js 设计模式

Node.js 设计模式
编辑推荐
适读人群 :开发人员和有一些 JavaScript 基本知识且有兴趣去深入了解如何开发和设计企业级的 Node.js 应用的软件架构师
- Node.js 的开发方式:如何使用正确的思维方式去解决一个 Node.js 开发设计问题。比如你会学习到,传统设计模式在 Node.js 开发中的不同体现,或者如何设计提供单一功能的模块。
- 一整套解决常见 Node.js 设计和编码问题的设计模式:你会学习到一整套像“瑞士军刀”一样功能多样、实用的设计模式,让你能即学即用,解决日常遇到的程序开发和设计问题。
- 如何编写模块化、高效率的 Node.js 程序:你将会理解开发大规模并且结构组织合理的 Node.js 程序的基本方法,并能运用这些方法去解决不属于现有设计模式范畴的新问题。
- 真实项目中用到的库和技术:LevelDb、Redis、RabbitMQ、ZMQ 及 Express 等用来作为示例阐述某个设计模式或者方法,让例子更加实用,对生态系统及它解决问题的方法有所了解。
内容简介
本书通过大量示例形象地阐述了 Node.js 的哲学思想和设计模式。内容主要由六部分组成:Node 核心思想、基础设计模式、异步控制流模式、流编程、Node.js 的传统设计模式和特有设计模式、通用编程的 Web 应用以及处理复杂实际问题的高级编程技巧。这是一本值得深入品读的书籍,读者若具备一些软件设计的理论知识会有助于理解书中提出的概念,中级 Node.js 开发者也会从本书有所收获。本书尤其适用于已经接触过 Node.js 并且想在效率、设计质量和可扩展性方面获得提升的开发者。
作者简介
Mario Casciaro,软件工程硕士学位,软件工程师,企业家,对技术、科学和开源知识充满了热情。他在 IBM 开始了职业生涯,数年间先后参与很多不同产品的开发,例如 Tivoli EndpointManager、Cognos Insight 及 SalesConnect。后来,他加入了一个成长中的 SaaS 公司――D4HTechnologies,负责开发一款实时应急管理的前沿产品。现在,Mario 是 Sponsorama.com 的联合创始人兼 CEO,这是一个帮助在线项目募集企业赞助资金的平台。Mario 也是 Node.js Design Patterns(Node.js 设计模式)第一版的作者。 翻译成员全部来自陆金所大前端团队,也是公众号大前端工程师的翻译小组成员,他们在公众号与知乎专栏里面也有很多新的技术文章的翻译,此次由寸志老师带队,大家一边在公司进行 nodejs 项目的推广实践,一边将实践的心得注入到本书翻译的理解,这是非常难得的结合,相信大家在读的过程中能体会到这一点。
目录
第 1 章欢迎来到 Node.js 平台
- Node.js 的哲学思想
- 小核心
- 小模块
- 小接触面
- 简单和实用
- 认识 Node.js 6 和 ES2015
- let 和 const 关键字
- 箭头函数
- 类语法
- 增强的对象字面量
- Map 和 Set 集合
- WeakMap 和 WeakSet 集合
- 模板字面量
- 其他 ES2015 特性
- Reactor 模式
- I/O 是缓慢的
- 阻塞 I/O
- 非阻塞 I/O
- 事件多路分解器
- Reactor 模式简介
- Node.js-libuv 的非阻塞 I/O 引擎
- Node.js 的秘诀
- 总结
第 2 章 Node.js 基础设计模式
- 回调模式
- CPS(Continuation Passing Style
- 同步或异步
- Node.js 回调约定
- 模块系统及其模式
- 揭示模块模式
- Node.js 模块解释
- 模块定义模式
- 观察者模式
- EventEmitter 类
- 创建和使用 EventEmitter
- 传播错误
- 使任何对象可观察
- 同步和异步事件
- EventEmitter 与回调
- 组合回调和 EventEmitter
- 总结
第 3 章异步控制流模式之回调函数
- 异步编程的困难
- 创建一个简单的网络蜘蛛
- 回调地狱
- 使用纯 JavaScript
- 回调规则
- 应用回调规则
- 顺序执行
- 并行执行
- 有限制的并行执行
- async 库
- 顺序执行
- 并行执行
- 有限制的并行执行
- 总结
- xiv
第 4 章异步控制流模式之 ES2015+
- promise
- 什么是 promise
- Promises/A+ 实现
- Node.js 风格函数的 promise 化
- 顺序执行
- 并行执行
- 有限制的并行执行
- 在公共 API 中暴露 callback 和 promise
- generator
- generator 基础
- generator 的异步控制流
- 顺序执行
- 并行执行
- 有限制的并行执行
- 使用 Babel 的 async await
- 安装和运行 Babel
- 比较
- 总结
第 5 章流编程
- 流的重要性
- 缓冲和流
- 空间效率
- 时间效率
- 组合性
- 开始学习流
- 流的分类
- 可读流
- 可写流
- 双向流 (Duplex stream)
- 变换流
- 使用管道拼接流
- 使用流处理异步流程
- 顺序执行
- 无序并行执行
- 无序有限制的并行执行
- 顺序并行执行
- xv
- 管道模式
- 组合流
- 复制流
- 合并流
- 复用和分解
- 总结
第 6 章设计模式
- 工厂模式
- 创建对象的通用接口
- 一种封装的机制
- 构建一个简单的代码分析器
- 可组合的工厂函数
- 扩展
- 揭示构造函数
- 只读事件触发器
- 扩展
- 代理模式
- 实现代理模式的方法
- 不同方法的比较
- 创建日志记录的写入流
- 生态系统中的代理模式――函数钩子与面向行为编程 (AOP)
- ES2015 中的 Proxy 对象
- 扩展
- 装饰者模式 (Decorator)
- 实现装饰者模式的方法
- 装饰一个 LevelUP 数据库
- 扩展
- 适配器模式 (Adapter)
- 通过文件系统 API 来使用 LevelUP 数据库
- 扩展
- 策略模式 (Strategy)
- 支持多种格式的配置对象
- 扩展
- 状态模式
- 实现一个基本的自动防故障套接字
- 模板模式 (Template)
- 配置管理器模板
- xvi
- 扩展
- 中间件 (Middleware)
- Express 中的中间件
- 设计模式中的中间件
- 为?MQ 创建中间件框架
- 在 Koa 中使用生成器的中间件
- 命令模式 (Command)
- 灵活的设计模式
- 总结
第 7 章连接模块
- 模块和依赖
- Node.js 中最常见的依赖
- 内聚和耦合
- 有状态的模块
- 连接模块模式
- 硬编码依赖
- 依赖注入
- 服务定位器
- 依赖注入容器
- 连接插件
- 插件作为包
- 扩展点
- 插件控制与应用程序控制的扩展
- 实现注销插件
- 总结
第 8 章通用 JavaScript 的 Web 应用程序
- 与浏览器端共享代码
- 共享模块
- Webpack 简介
- Webpack 的魔力
- Webpack 的优点
- 使用 ES2015 和 Webpack
- 跨平台开发基础
- 运行时代码分支
- 构建时代码分支
- 模块交换
- xvii
- 用于跨平台开发的设计模式
- React 介绍
第一个 React 组件
- JSX 是什么
- 配置 Webpack 以实现 JSX 转换
- 在浏览器中渲染
- React 路由库
- 创建通用 JavaScript 应用程序
- 创建可用的组件
- 服务端渲染
- 通用渲染和路由
- 通用数据检索
- 总结
第 9 章高级异步编程技巧
- 需要异步初始化的模块
- 规范解决方案
- 预初始化队列
- 题外话
- 异步批处理和缓存
- 实现没有缓存或批处理的服务器
- 异步请求批处理
- 异步请求缓存
- 使用 promise 进行批处理和缓存
- 运行 CPU 绑定的任务
- 解决子集和问题
- 交叉使用 setImmediate
- 使用多进程
- 总结
第 10 章扩展与架构模式
- 应用程序扩展介绍
- 扩展 Node.js 应用程序
- 可扩展性的三个维度
- 克隆和负载均衡
- 集群模块
- 处理有状态通信
- 使用反向代理进行扩展
- xviii
- 使用服务注册表
- 对等负载均衡
- 分解复杂的应用程序
- 单体式架构
- 微服务架构
- 微服务架构中的集成模式
- 总结
第 11 章消息传递与集成模式
- 消息系统的基础
- 单向和请求 / 应答模式
- 消息类型
- 异步消息和队列
- 对等或基于代理的消息
- 发布 / 订阅模式
- 构建简约的实时聊天应用程序
- 使用 Redis 作为消息代理
- 使用?MQ 对等发布 / 订阅
- 持久订阅者
- 管道和任务分配模式
- MQ 扇出 / 扇入模式
- 使用 AMQP 实现管道和竞争消费者模式
- 请求 / 应答模式
- 关联标识符
- 返回地址
- 总结