新書推薦:
《
甘于平凡的勇气
》
售價:HK$
49.5
《
存在与结构:精神分析的法国转向——以拉康与萨特为中心
》
售價:HK$
52.8
《
生成式人工智能:AIGC与多模态技术应用实践指南
》
售價:HK$
108.9
《
石油帝国的兴衰:英国的工业化与去工业化
》
售價:HK$
97.9
《
古典的回響:溪客舊廬藏明清文人繪畫
》
售價:HK$
437.8
《
根源、制度和秩序:从老子到黄老学(王中江著作系列)
》
售價:HK$
121.0
《
索恩丛书·北宋政治与保守主义:司马光的从政与思想(1019~1086)
》
售價:HK$
75.9
《
掌故家的心事
》
售價:HK$
85.8
|
編輯推薦: |
软件架构是指复杂应用程序的高级设计。它像我们使用的编程语言一样不断进化。现代C++允许开发人员在不牺牲可读性和可维护性的情况下,用高级语言编写高性能应用程序。如果你正在使用现代C++,那么本书将帮助你把相关知识应用到工作中,设计分布式大规模应用程序。本书首先快速介绍架构概念,包括已建立的模式和不断上升的趋势;然后,详细阐释软件架构的概念及其组件;接着,深入探索应用程序架构中涉及的设计概念和软件开发中涉及的模式,详细介绍构建、打包、集成和部署组件的方法,以及架构的不同质量属性,例如可维护性、可重用性、可测试性、性能、可伸缩性和安全性;最后,概述分布式系统,例如面向服务的架构、微服务和云原生设计,并简单介绍如何在应用程序开发中应用它们。学完本书内容,你将能够使用现代C++和相关工具构建分布式服务,并根据客户的需求交付解决方案。
|
內容簡介: |
本书结合现代C++特性,详细介绍软件架构的实用方法及实践,探索了如何在单体应用程序中使用成熟的设计模式,如何使应用程序具有健壮性、安全性、高性能和可维护性,以及如何使用面向服务的架构、微服务、容器和无服务器计算等架构模式构建连接多个单体应用程序的高级服务。全书共分为四部分:第一部分包含第1~3章,介绍软件架构的概念及组件,包括软件架构的重要性和良好的设计原则、架构风格、功能性和非功能性需求;第二部分包含第4~7章,介绍C++软件的开发和设计,包括架构与系统设计、C++语言特性、设计模式,以及构建和打包;第三部分包含第8~11章,介绍架构的质量属性,包括测试、持续集成和持续部署、安全性、性能;第四部分包含第12~15章,介绍云原生设计原则,包括面向服务的架构、微服务、容器、云原生设计。本书适合C++程序员、架构师等相关技术人员阅读。
|
目錄:
|
目 录Contents前 言第一部分 软件架构的概念和组成部分第1章 软件架构的重要性和良好的设计原则 21.1 技术要求 21.2 软件架构 21.3 适当架构的重要性 31.3.1 软件腐朽 41.3.2 意外架构 41.4 优秀架构的基本原理 41.4.1 架构上下文 41.4.2 相关方 41.4.3 业务和技术环境 51.5 使用敏捷原则开发架构 51.6 C++的哲学思想 71.7 SOLID和DRY原则 91.7.1 单一责任原则 91.7.2 开放封闭原则 91.7.3 里氏替换原则 101.7.4 接口隔离原则 111.7.5 依赖倒置原则 121.7.6 DRY原则 151.8 耦合和内聚 161.8.1 耦合 161.8.2 内聚 171.9 总结 19问题 19进一步阅读 19第2章 架构风格 202.1 技术要求 202.2 有状态风格和无状态风格 202.3 单体风格 232.4 服务和微服务 242.5 基于事件的架构 272.5.1 基于事件的常见拓扑结构 282.5.2 事件溯源 292.6 分层架构 302.7 基于模块的架构 322.8 总结 32问题 33进一步阅读 33第3章 功能性和非功能性需求 343.1 从源代码生成文档的技术要求 343.2 需求的类型 343.2.1 功能性需求 353.2.2 非功能性需求 353.3 架构级重要需求 363.3.1 指示信号 373.3.2 阻碍以及应对方法 373.4 从各种来源收集需求 383.4.1 了解上下文 383.4.2 了解现有文档 393.4.3 了解相关方 393.4.4 收集来自相关方的需求 393.5 文档化需求 403.5.1 文档化上下文 403.5.2 文档化范围 413.5.3 文档化功能性需求 413.5.4 文档化非功能性需求 423.5.5 管理文档的版本历史 423.5.6 文档化敏捷项目中的需求 433.5.7 其他部分 433.6 文档化系统架构 443.6.1 4+1模型 443.6.2 C4模型 483.6.3 文档化敏捷项目中的架构 513.7 选择文档的正确视图 513.7.1 功能视图 523.7.2 信息视图 523.7.3 并发视图 533.7.4 开发视图 533.7.5 部署和操作视图 543.8 生成文档 553.8.1 生成需求文档 553.8.2 从代码生成图 553.8.3 从代码生成API文档 553.9 总结 60问题 60进一步阅读 61第二部分 C++软件的设计和开发第4章 架构与系统设计 644.1 技术要求 644.2 分布式系统的特性 644.2.1 不同的服务模型以及何时使用它们 654.2.2 避免分布式计算的错误假设 674.2.3 CAP定理和最终的一致性 704.3 系统容错性和可用性 724.3.1 计算系统的可用性 724.3.2 构建容错系统 734.3.3 故障检测 754.3.4 减少故障的影响 764.4 系统集成 784.4.1 管道和过滤器模式 784.4.2 消费者竞争 784.4.3 从旧系统过渡 794.5 在规模化部署时保持性能 804.5.1 CQRS和事件溯源 804.5.2 缓存 824.6 系统部署 844.6.1 边车模式 844.6.2 零停机时间部署 874.6.3 外部配置存储 894.7 管理API 894.8 总结 90问题 90进一步阅读 91第5章 利用C++语言特性 925.1 技术要求 925.2 设计优秀的API 935.2.1 利用RAII 935.2.2 指定C++容器接口 935.2.3 在接口中使用指针 965.2.4 指定前置条件和后置条件 975.2.5 使用内联命名空间 975.2.6 使用std::optional 985.3 编写声明式代码 995.3.1 展示特色商品 1015.3.2 标准范围介绍 1055.4 在编译时移动计算 1075.5 利用安全类型的力量 1085.6 编写模块化的C++代码 1125.7 总结 114问题 114进一步阅读 115第6章 设计模式和C++ 1166.1 技术要求 1166.2 C++编程习语 1166.2.1 使用RAII保护自动执行作用域的退出操作 1176.2.2 管理可复制性和可移动性 1176.2.3 使用隐藏的友元 1196.2.4 使用复制和交换习语提供异常安全性 1206.2.5 编写niebloid 1216.2.6 基于策略的设计习语 1236.3 奇异递归模板模式 1246.3.1 知道何时使用动态多态性和静态多态性 1246.3.2 实现静态多态性 1256.3.3 插曲—使用类型擦除技术 1276.4 创建对象 1286.4.1 使用工厂 1286.4.2 使用构建器 1326.5 在C++中跟踪状态和访问对象 1356.6 有效地处理内存 1386.6.1 使用SSO/SOO减少动态分配 1386.6.2 通过COW来节省内存 1396.6.3 使用多态分配器 1396.7 总结 143问题 143进一步阅读 144第7章 构建和打包 1457.1 技术要求 1457.2 充分利用编译器 1457.2.1 使用多个编译器 1467.2.2 减少构建时间 1467.2.3 查找潜在的代码问题 1497.2.4 使用以编译器为中心的工具 1507.3 抽象构建过程 1517.3.1 认识CMake 1517.3.2 使用生成器表达式 1547.4 使用外部模块 1557.4.1 获取依赖项 1557.4.2 使用查找脚本 1567.4.3 编写查找脚本 1577.4.4 使用Conan软件包管理器 1597.4.5
|
內容試閱:
|
Preface前 言现代C++允许程序员用高级语言编写高性能的应用程序,而不牺牲可读性和可维护性。不过,软件架构还不仅仅是编程语言的问题,还包括很多其他的方面。在本书中,我们将展示如何设计和构建健壮、可扩展且性能良好的应用程序。通过对基本概念、实例和自测问题的逐步解释,你将首先理解架构的重要性并学习一个实际应用程序的案例。你将学习如何在单体应用程序级别使用成熟的设计模式,探索如何使应用程序具有健壮性、安全性、高性能和可维护性。然后,你将使用面向服务的架构、微服务、容器和无服务器(serverless)计算技术等架构模式构建连接多个单体应用程序的高级服务。最后,你将能够使用现代C++和相关工具来构建分布式服务,以提供客户满意的解决方案。你是否有兴趣成为一名软件架构师,或者想了解更多关于架构的最新趋势?如果是,那么本书应该能帮助你!读者定位使用现代C++的开发人员能够将他们的知识与这本实用的软件架构指南结合到一起。本书以一种侧重实践的方式来实现相关方法,这可以让你立即运用本书的知识来提高工作效率。本书的主要内容第1章讲述为什么设计软件。第2章涵盖在架构方面可以采取的不同方式。第3章探讨对客户需求的理解。第4章探讨如何创建有效的软件解决方案。第5章介绍如何使用原生C++。第6章重点介绍现代C++习语和有用的代码构造。第7章介绍如何把代码部署到生产环境。第8章介绍如何比客户先发现bug。第9章介绍自动化软件发布的现代方法。第10章探讨如何确保系统不容易被破坏。第11章关注性能。C++应该更快,它能更快吗?第12章介绍如何基于服务来构建系统。第13章只关注一件事,即如何设计微服务。第14章提供一个构建、打包和运行应用程序的统一接口。第15章超越传统的基础设施,探索云原生设计。如何充分利用这本书本书中的代码示例大多是针对GCC 10编写的。尽管C++20的某些特性可能在旧版本的编译器中缺失,但这些示例也应该兼容Clang或微软的Visual C++。为了尽可能接近作者的开发环境,我们建议你在类Linux环境中使用Nix(https://nixos.org/download.html)和direnv(https://direnv.net/)。如果你在包含代码示例的目录中运行direnv allow,那么这两个工具将会配置好编译器和支持包。如果没有Nix和direnv,就不能保证这些示例正常工作。如果使用的是macOS,Nix应该可以正常工作。如果使用的是Windows,那么(AWS的)Linux 2的Windows子系统是一个使用带Nix的Linux开发环境的好方法。要安装这两个工具,需要运行以下命令:在执行上述命令后,Nix应该下载并安装所有必要的依赖项。这虽然需要一段时间,但有助于确保我们使用的是完全相同的工具。下载示例代码文件你可以从GitHub地址https://github.com/PacktPublishing/Software-Architecture-with-Cpp 下载本书的示例代码文件。必要时,我们将在现有的GitHub代码库上对代码进行更新。下载彩色图片我们还提供了一个PDF文件,里面有本书中使用的屏幕截图的彩色图片,详见地址https://static.packt-cdn.com/downloads/9781838554590_ColorImages.pdf。排版约定本书中使用的文本格式约定如下。代码体文本:代表文本中的代码、数据库表名称、文件夹名、文件名、文件扩展名、路径名、用户输入和Twitter句柄,例如“前两个字段(openapi和info)是描述文档的元数据”。代码块的设置如下:代表警告或重要的提示事项。代表提示和技巧。
|
|