封面
版权信息
作者简介
前言
第一部分 软件架构的概念和组成部分
第1章 软件架构的重要性和良好的设计原则
1.1 技术要求
1.2 软件架构
1.3 适当架构的重要性
1.3.1 软件腐朽
1.3.2 意外架构
1.4 优秀架构的基本原理
1.4.1 架构上下文
1.4.2 相关方
1.4.3 业务和技术环境
1.5 使用敏捷原则开发架构
1.6 C++的哲学思想
1.7 SOLID和DRY原则
1.7.1 单一责任原则
1.7.2 开放封闭原则
1.7.3 里氏替换原则
1.7.4 接口隔离原则
1.7.5 依赖倒置原则
1.7.6 DRY原则
1.8 耦合和内聚
1.8.1 耦合
1.8.2 内聚
1.9 总结
问题
进一步阅读
第2章 架构风格
2.1 技术要求
2.2 有状态风格和无状态风格
2.3 单体风格
2.4 服务和微服务
2.5 基于事件的架构
2.5.1 基于事件的常见拓扑结构
2.5.2 事件溯源
- APP免费
2.6 分层架构
- APP免费
2.7 基于模块的架构
- APP免费
2.8 总结
- APP免费
问题
- APP免费
进一步阅读
- APP免费
第3章 功能性和非功能性需求
- APP免费
3.1 从源代码生成文档必备的技术要求
- APP免费
3.2 需求的类型
- APP免费
3.2.1 功能性需求
- APP免费
3.2.2 非功能性需求
- APP免费
3.3 架构级重要需求
- APP免费
3.3.1 指示信号
- APP免费
3.3.2 阻碍以及应对方法
- APP免费
3.4 从各种来源收集需求
- APP免费
3.4.1 了解上下文
- APP免费
3.4.2 了解现有文档
- APP免费
3.4.3 了解相关方
- APP免费
3.4.4 收集来自相关方的需求
- APP免费
3.5 文档化需求
- APP免费
3.5.1 文档化上下文
- APP免费
3.5.2 文档化范围
- APP免费
3.5.3 文档化功能性需求
- APP免费
3.5.4 文档化非功能性需求
- APP免费
3.5.5 管理文档的版本历史
- APP免费
3.5.6 文档化敏捷项目中的需求
- APP免费
3.5.7 其他部分
- APP免费
3.6 文档化系统架构
- APP免费
3.6.1 4+1模型
- APP免费
3.6.2 C4模型
- APP免费
3.6.3 文档化敏捷项目中的架构
- APP免费
3.7 选择文档的正确视图
- APP免费
3.7.1 功能视图
- APP免费
3.7.2 信息视图
- APP免费
3.7.3 并发视图
- APP免费
3.7.4 开发视图
- APP免费
3.7.5 部署和操作视图
- APP免费
3.8 生成文档
- APP免费
3.8.1 生成需求文档
- APP免费
3.8.2 从代码生成图
- APP免费
3.8.3 从代码生成API文档
- APP免费
3.9 总结
- APP免费
问题
- APP免费
进一步阅读
- APP免费
第二部分 C++软件的设计和开发
- APP免费
第4章 架构与系统设计
- APP免费
4.1 技术要求
- APP免费
4.2 分布式系统的特性
- APP免费
4.2.1 不同的服务模型以及何时使用它们
- APP免费
4.2.2 避免分布式计算的错误假设
- APP免费
4.2.3 CAP定理和最终的一致性
- APP免费
4.3 系统容错性和可用性
- APP免费
4.3.1 计算系统的可用性
- APP免费
4.3.2 构建容错系统
- APP免费
4.3.3 故障检测
- APP免费
4.3.4 减少故障的影响
- APP免费
4.4 系统集成
- APP免费
4.4.1 管道和过滤器模式
- APP免费
4.4.2 消费者竞争
- APP免费
4.4.3 从旧系统过渡
- APP免费
4.5 在规模化部署时保持性能
- APP免费
4.5.1 CQRS和事件溯源
- APP免费
4.5.2 缓存
- APP免费
4.6 系统部署
- APP免费
4.6.1 边车模式
- APP免费
4.6.2 零停机时间部署
- APP免费
4.6.3 外部配置存储
- APP免费
4.7 管理API
- APP免费
4.8 总结
- APP免费
问题
- APP免费
进一步阅读
- APP免费
第5章 利用C++语言特性
- APP免费
5.1 技术要求
- APP免费
5.2 设计优秀的API
- APP免费
5.2.1 利用RAII
- APP免费
5.2.2 指定C++容器接口
- APP免费
5.2.3 在接口中使用指针
- APP免费
5.2.4 指定前置条件和后置条件
- APP免费
5.2.5 使用内联命名空间
- APP免费
5.2.6 使用std::optional
- APP免费
5.3 编写声明式代码
- APP免费
5.3.1 展示特色商品
- APP免费
5.3.2 标准范围介绍
- APP免费
5.4 在编译时移动计算
- APP免费
5.5 利用安全类型的力量
- APP免费
5.6 编写模块化的C++代码
- APP免费
5.7 总结
- APP免费
问题
- APP免费
进一步阅读
- APP免费
第6章 设计模式和C++
- APP免费
6.1 技术要求
- APP免费
6.2 C++编程习语
- APP免费
6.2.1 使用RAII保护自动执行作用域的退出操作
- APP免费
6.2.2 管理可复制性和可移动性
- APP免费
6.2.3 使用隐藏的友元
- APP免费
6.2.4 使用复制和交换习语提供异常安全性
- APP免费
6.2.5 编写niebloid
- APP免费
6.2.6 基于策略的设计习语
- APP免费
6.3 奇异递归模板模式
- APP免费
6.3.1 知道何时使用动态多态性和静态多态性
- APP免费
6.3.2 实现静态多态性
- APP免费
6.3.3 插曲——使用类型擦除技术
- APP免费
6.4 创建对象
- APP免费
6.4.1 使用工厂
- APP免费
6.4.2 使用构建器
- APP免费
6.5 在C++中跟踪状态和访问对象
- APP免费
6.6 有效地处理内存
- APP免费
6.6.1 使用SSO/SOO减少动态分配
- APP免费
6.6.2 通过COW来节省内存
- APP免费
6.6.3 使用多态分配器
- APP免费
6.7 总结
- APP免费
问题
- APP免费
进一步阅读
- APP免费
第7章 构建和打包
- APP免费
7.1 技术要求
- APP免费
7.2 充分利用编译器
- APP免费
7.2.1 使用多个编译器
- APP免费
7.2.2 减少构建时间
- APP免费
7.2.3 查找潜在的代码问题
- APP免费
7.2.4 使用以编译器为中心的工具
- APP免费
7.3 抽象构建过程
- APP免费
7.3.1 认识CMake
- APP免费
7.3.2 使用生成器表达式
- APP免费
7.4 使用外部模块
- APP免费
7.4.1 获取依赖项
- APP免费
7.4.2 使用查找脚本
- APP免费
7.4.3 编写查找脚本
- APP免费
7.4.4 使用Conan软件包管理器
- APP免费
7.4.5 添加测试
- APP免费
7.5 重用高质量代码
- APP免费
7.5.1 安装
- APP免费
7.5.2 导出
- APP免费
7.5.3 使用CPack
- APP免费
7.6 使用Conan打包
- APP免费
7.6.1 创建conanfile.py脚本
- APP免费
7.6.2 测试Conan软件包
- APP免费
7.6.3 将Conan打包代码添加到CMakeLists
- APP免费
7.7 总结
- APP免费
问题
- APP免费
进一步阅读
- APP免费
第三部分 架构的质量属性
- APP免费
第8章 编写可测试代码
- APP免费
8.1 技术要求
- APP免费
8.2 为什么要测试代码
- APP免费
8.2.1 测试金字塔
- APP免费
8.2.2 非功能性测试
- APP免费
8.2.3 回归测试
- APP免费
8.2.4 根因分析
- APP免费
8.2.5 进一步改进的基础工作
- APP免费
8.3 测试框架
- APP免费
8.3.1 GTest示例
- APP免费
8.3.2 Catch2示例
- APP免费
8.3.3 CppUnit示例
- APP免费
8.3.4 Doctest示例
- APP免费
8.3.5 测试编译时代码
- APP免费
8.4 模拟和伪装
- APP免费
8.4.1 不同的测试替身
- APP免费
8.4.2 测试替身的其他用途
- APP免费
8.4.3 编写测试替身
- APP免费
8.5 测试驱动的类设计
- APP免费
8.5.1 测试和类设计冲突时
- APP免费
8.5.2 防御性编程
- APP免费
8.5.3 无聊的重复——先写测试
- APP免费
8.6 自动化测试以实现持续集成和持续部署
- APP免费
8.6.1 测试基础设施
- APP免费
8.6.2 使用Serverspec进行测试
- APP免费
8.6.3 使用Testinfra进行测试
- APP免费
8.6.4 使用Goss进行测试
- APP免费
8.7 总结
- APP免费
问题
- APP免费
进一步阅读
- APP免费
第9章 持续集成和持续部署
- APP免费
9.1 技术要求
- APP免费
9.2 CI简介
- APP免费
9.2.1 早发布,常发布
- APP免费
9.2.2 CI的优点
- APP免费
9.2.3 门控机制
- APP免费
9.2.4 使用GitLab实现管道
- APP免费
9.3 审查代码更改
- APP免费
9.3.1 自动门控机制
- APP免费
9.3.2 代码审查——手动门控机制
- APP免费
9.3.3 代码审查的不同方法
- APP免费
9.3.4 使用拉请求进行代码审查
- APP免费
9.4 测试驱动的自动化
- APP免费
9.4.1 行为驱动开发
- APP免费
9.4.2 编写CI测试
- APP免费
9.4.3 持续测试
- APP免费
9.5 将部署作为代码管理
- APP免费
9.5.1 使用Ansible
- APP免费
9.5.2 Ansible如何与CI/CD管道相匹配
- APP免费
9.5.3 使用组件创建部署代码
- APP免费
9.6 构建部署代码
- APP免费
9.7 构建CD管道
- APP免费
9.7.1 持续部署和持续交付
- APP免费
9.7.2 构建示例CD管道
- APP免费
9.8 使用不可变基础设施
- APP免费
9.8.1 什么是不可变基础设施
- APP免费
9.8.2 不可变基础设施的好处
- APP免费
9.8.3 使用Packer构建实例映像
- APP免费
9.8.4 利用Terraform协调基础设施
- APP免费
9.9 总结
- APP免费
问题
- APP免费
进一步阅读
- APP免费
第10章 代码安全性和部署安全性
- APP免费
10.1 技术要求
- APP免费
10.2 代码安全性检查
- APP免费
10.2.1 强调安全性的设计
- APP免费
10.2.2 安全编码、指南和GSL
- APP免费
10.2.3 防御性编程,验证一切
- APP免费
10.2.4 最常见的漏洞
- APP免费
10.3 检查依赖项是否安全
- APP免费
10.3.1 通用漏洞披露
- APP免费
10.3.2 自动扫描器
- APP免费
10.3.3 自动化依赖项升级管理
- APP免费
10.4 强化代码
- APP免费
10.4.1 面向安全的内存分配器
- APP免费
10.4.2 自动检查
- APP免费
10.4.3 进程隔离和沙箱
- APP免费
10.5 强化环境
- APP免费
10.5.1 静态链接与动态链接
- APP免费
10.5.2 地址空间布局随机化
- APP免费
10.5.3 DevSecOps
- APP免费
10.6 总结
- APP免费
问题
- APP免费
进一步阅读
- APP免费
第11章 性能
- APP免费
11.1 技术要求
- APP免费
11.2 性能测量
- APP免费
11.2.1 执行准确且有意义的测量
- APP免费
11.2.2 利用不同类型的测量工具
- APP免费
11.2.3 使用微基准测试
- APP免费
11.2.4 性能分析
- APP免费
11.2.5 跟踪
- APP免费
11.3 帮助编译器生成高性能代码
- APP免费
11.3.1 优化整个程序
- APP免费
11.3.2 基于真实世界的使用模式进行优化
- APP免费
11.3.3 编写缓存友好的代码
- APP免费
11.3.4 在设计代码时考虑数据
- APP免费
11.4 计算并行化
- APP免费
11.4.1 理解线程和进程之间的差异
- APP免费
11.4.2 使用标准并行算法
- APP免费
11.4.3 使用OpenMP和MPI进行并行计算
- APP免费
11.5 使用协程
- APP免费
11.5.1 区分cppcoro实用程序
- APP免费
11.5.2 可等待对象和协程
- APP免费
11.6 总结
- APP免费
问题
- APP免费
进一步阅读
- APP免费
第四部分 云原生设计原则
- APP免费
第12章 面向服务的架构
- APP免费
12.1 技术要求
- APP免费
12.2 理解面向服务的架构
- APP免费
12.2.1 实现方法
- APP免费
12.2.2 面向服务的架构的好处
- APP免费
12.2.3 SOA面临的挑战
- APP免费
12.3 采用消息传递原则
- APP免费
12.3.1 低开销消息传递系统
- APP免费
12.3.2 代理消息传递系统
- APP免费
12.4 使用Web服务
- APP免费
12.4.1 用于调试Web服务的工具
- APP免费
12.4.2 基于XML的Web服务
- APP免费
12.4.3 基于JSON的Web服务
- APP免费
12.4.4 表述性状态转移
- APP免费
12.4.5 GraphQL
- APP免费
12.5 利用托管服务和云厂商
- APP免费
12.5.1 作为SOA扩展的云计算
- APP免费
12.5.2 云原生架构
- APP免费
12.6 总结
- APP免费
问题
- APP免费
进一步阅读
- APP免费
第13章 微服务设计
- APP免费
13.1 技术要求
- APP免费
13.2 深入微服务
- APP免费
13.2.1 微服务的优点
- APP免费
13.2.2 微服务的缺点
- APP免费
13.2.3 微服务的设计模式
- APP免费
13.3 构建微服务
- APP免费
13.3.1 外部内存管理
- APP免费
13.3.2 外部存储
- APP免费
13.3.3 外部计算
- APP免费
13.4 观测微服务
- APP免费
13.4.1 日志记录
- APP免费
13.4.2 监控
- APP免费
13.4.3 跟踪
- APP免费
13.4.4 集成可观测性解决方案
- APP免费
13.5 连接微服务
- APP免费
13.5.1 应用程序编程接口
- APP免费
13.5.2 远程过程调用
- APP免费
13.6 扩展微服务
- APP免费
13.6.1 扩展每个主机部署的单个服务
- APP免费
13.6.2 扩展每个主机部署的多个服务
- APP免费
13.7 总结
- APP免费
问题
- APP免费
进一步阅读
- APP免费
第14章 容器
- APP免费
14.1 技术要求
- APP免费
14.2 重新介绍容器
- APP免费
14.2.1 容器类型
- APP免费
14.2.2 微服务的兴起
- APP免费
14.2.3 选择何时使用容器
- APP免费
14.3 构建容器
- APP免费
14.3.1 容器映像说明
- APP免费
14.3.2 使用Dockerfile构建应用程序
- APP免费
14.3.3 命名和分发映像
- APP免费
14.3.4 编译的应用程序和容器
- APP免费
14.3.5 利用清单生成多架构目标
- APP免费
14.3.6 构建应用程序容器的其他方法
- APP免费
14.3.7 将容器与CMake集成
- APP免费
14.4 测试和集成容器
- APP免费
14.4.1 容器内的运行时库
- APP免费
14.4.2 其他容器运行时
- APP免费
14.5 容器编排
- APP免费
14.5.1 自托管解决方案
- APP免费
14.5.2 托管服务
- APP免费
14.6 总结
- APP免费
问题
- APP免费
进一步阅读
- APP免费
第15章 云原生设计
- APP免费
15.1 技术要求
- APP免费
15.2 云原生
- APP免费
15.2.1 云原生计算基础
- APP免费
15.2.2 云作为操作系统
- APP免费
15.3 使用Kubernetes编排云原生工作负载
- APP免费
15.3.1 Kubernetes结构
- APP免费
15.3.2 部署Kubernetes的可能方法
- APP免费
15.3.3 理解Kubernetes的概念
- APP免费
15.3.4 Kubernetes网络
- APP免费
15.3.5 什么时候适合使用Kubernetes
- APP免费
15.4 分布式系统中的可观测性
- APP免费
15.4.1 跟踪与日志记录的区别
- APP免费
15.4.2 选择跟踪解决方案
- APP免费
15.4.3 使用OpenTracing检测应用程序
- APP免费
15.5 使用服务网格连接服务
- APP免费
15.5.1 服务网格
- APP免费
15.5.2 服务网格解决方案
- APP免费
15.6 走向GitOps
- APP免费
15.6.1 GitOps的原则
- APP免费
15.6.2 GitOps的好处
- APP免费
15.6.3 GitOps工具
- APP免费
15.7 总结
- APP免费
问题
- APP免费
进一步阅读
- APP免费
附录
- APP免费
问题解答
- APP免费
推荐阅读
- APP免费
译者简介
- APP免费
封底
更新时间:2024-03-04 16:57:16