内容简介
在云原生、微服务、AI集成等技术浪潮下,架构设计已成为软件开发的核心竞争力,但许多开发者仍困于“决策无章法”“敏捷与规范难平衡”等难题。《软件架构设计:实用方法及实践(原书第2版)》以经典ADD方法为根基,结合前沿趋势,为架构师提供了一套“从理论到落地”的完整解决方案。 本书三大核心价值: 方法论升级:新增云原生架构、API优先设计、技术债务治理等章节,覆盖部署可观测性、敏捷实践等热点,适配高并发、分布式等复杂场景。 案例驱动:通过“酒店定价系统”“数字孪生平台”两大实战案例,拆解微服务拆分、AI集成等设计思路,提供20+可复用模板。 敏捷赋能:融合DevOps与持续交付,教你用“属性驱动”平衡业务增长与技术演进,避免架构腐化。
精彩书评
亨伯托·塞万提斯(Humberto Cervantes)是一位经验丰富的软件架构师,同时也是墨西哥城Iztapalapa大都会自治大学的教授。他的主要研究方向是开发工具和方法,以改进软件架构设计实践。他还持有SEI颁发的软件架构师专业证书和ATAM评估师证书。
里克·卡兹曼(Rick Kazman)是夏威夷大学信息技术管理专业的Danny和Elsa Lui杰出教授。他参与创建了架构分析方法(ATAM)以及用于架构分析的Titan和DV8工具。
精彩书摘
目 录 Contents
译者序
前 言
致 谢
关于作者
第1章 引言1
1.1 动机1
1.2 软件架构2
1.2.1 软件架构的重要性2
1.2.2 生命周期活动3
1.3 架构师的角色5
1.4 ADD简史6
1.5 总结7
1.6 扩展阅读7
1.7 讨论问题8
第2章 架构设计9
2.1 通用设计9
2.2 软件架构中的设计10
2.2.1 架构设计11
2.2.2 元素交互设计12
2.2.3 元素内部设计12
2.2.4 决策和设计级别12
2.3 为什么架构设计如此重要13
2.4 架构驱动因素14
2.4.1 设计目标14
2.4.2 质量属性15
2.4.3 主要功能20
2.4.4 架构关注点21
2.4.5 约束条件22
2.5 总结22
2.6 扩展阅读22
2.7 讨论问题23
第3章 制定设计决策25
3.1 制定设计决策概述25
3.2 设计理念:创建软件结构的基石28
3.2.1 参考架构29
3.2.2 模式30
3.2.3 策略30
3.2.4 外部开发的组件32
3.3 支持性能的设计理念33
3.3.1 性能策略33
3.3.2 性能模式34
3.4 支持可用性的设计理念35
3.4.1 可用性策略35
3.4.2 可用性模式37
3.5 支持可修改性的设计概念39
3.5.1 可修改性策略40
3.5.2 可修改性模式41
3.6 支持安全性的设计理念42
3.6.1 安全策略42
3.6.2 安全模式44
3.7 支持可集成性的设计理念45
3.7.1 可集成性策略45
3.7.2 集成模式47
3.8 总结48
3.9 扩展阅读48
3.10 讨论问题49
第4章 架构设计过程50
4.1 对具备原则性的方法的需求50
4.2 属性驱动设计3.0版本51
4.2.1 步骤1:审查输入51
4.2.2 步骤2:通过选择驱动因素
建立迭代目标52
4.2.3 步骤3:选择系统元素进行细化53
4.2.4 步骤4:选择满足选定驱动
因素的设计概念53
4.2.5 步骤5:实例化架构元素、分配
职责并定义接口53
4.2.6 步骤6:绘制视图草图并记录
设计决策54
4.2.7 步骤7:执行当前设计分析,
并审查迭代目标和设计目标
的实现情况54
4.2.8 必要时进行迭代54
4.3 在不同的系统环境中应用属性
驱动设计55
4.3.1 面向成熟领域的全新系统设计55
4.3.2 面向新兴领域的全新系统设计57
4.3.3 面向现有系统的变更设计57
4.3.4 替换遗留应用程序的设计58
4.4 识别和选择设计概念58
4.4.1 设计概念的识别58
4.4.2 设计概念的选择59
4.5 生成结构61
4.5.1 实例化元素62
4.5.2 分配功能并识别属性63
4.5.3 建立元素间的关系63
4.6 定义接口63
4.6.1 外部接口63
4.6.2 内部接口63
4.7 在设计过程中创建初步文档67
4.7.1 记录视图草图67
4.7.2 记录设计决策69
4.8 跟踪设计进度70
4.8.1 使用架构待办事项列表70
4.8.2 设计看板的使用71
4.9 总结72
4.10 扩展阅读72
4.11 讨论问题73
第5章 以API为中心的设计74
5.1 业务敏捷性74
5.1.1 从项目转向产品75
5.1.2 业务敏捷性的驱动因素75
5.2 以API为中心的设计关注点76
5.2.1 API和可组合性76
5.2.2 API优先设计77
5.2.3 以API为中心的设计概念82
5.2.4 API管理85
5.3 以API为中心的设计和ADD87
5.3.1 ADD和API规范设计87
5.3.2 在以API为中心的设计的其他
领域使用ADD88
5.4 总结89
5.5 扩展阅读89
5.6 讨论问题90
第6章 可部署性设计91
6.1 可部署性原则和架构设计91
6.1.1 可部署性的定义91
6.1.2 持续集成、部署和交付93
6.1.3 可部署性设计的探讨94
6.2 支持可部署性的设计决策95
6.2.1 可部署性策略96
6.2.2 可部署性模式97
6.3 可部署性和ADD102
6.4 总结104
6.5 扩展阅读104
6.6 讨论问题105
第7章 设计基于云的解决方案106
7.1 云计算概述106
7.1.1 什么是云计算106
7.1.2 服务模型107
7.1.3 托管资源108
7.2 驱动因素和云108
7.2.1 质量属性108
7.2.2 约束条件109
7.3 基于云的设计概念111
7.3.1 外部开发组件:云功能111
7.3.2 策略114
7.3.3
目录
本书阐述了如何以一种系统的、可预测的、可重复的、节约成本的方式来设计各类软件架构。书中不仅介绍了一种实用的架构设计方法,还提供了由可重用的设计知识所支撑的结构化方法,也收录了丰富的案例研究,用于展示如何使用这一实用方法。利用现实案例,你将掌握已被验证过的属性驱动设计(ADD)的全新版本,比如伴随功能需求和架构问题出现的可修改性、可用性以及可靠性。Humberto Cervantes和Rick Kazman基于他们丰富的经验,指导你通过各具特色的实用设计来支持完整的软件周期,从需求到维护,再到演化。你将学习如何成功地将设计整合在组织背景中,以及如何使用敏捷方法设计软件系统。
试读
目 录 Contents
译者序
前 言
致 谢
关于作者
第1章 引言1
1.1 动机1
1.2 软件架构2
1.2.1 软件架构的重要性2
1.2.2 生命周期活动3
1.3 架构师的角色5
1.4 ADD简史6
1.5 总结7
1.6 扩展阅读7
1.7 讨论问题8
第2章 架构设计9
2.1 通用设计9
2.2 软件架构中的设计10
2.2.1 架构设计11
2.2.2 元素交互设计12
2.2.3 元素内部设计12
2.2.4 决策和设计级别12
2.3 为什么架构设计如此重要13
2.4 架构驱动因素14
2.4.1 设计目标14
2.4.2 质量属性15
2.4.3 主要功能20
2.4.4 架构关注点21
2.4.5 约束条件22
2.5 总结22
2.6 扩展阅读22
2.7 讨论问题23
第3章 制定设计决策25
3.1 制定设计决策概述25
3.2 设计理念:创建软件结构的基石28
3.2.1 参考架构29
3.2.2 模式30
3.2.3 策略30
3.2.4 外部开发的组件32
3.3 支持性能的设计理念33
3.3.1 性能策略33
3.3.2 性能模式34
3.4 支持可用性的设计理念35
3.4.1 可用性策略35
3.4.2 可用性模式37
3.5 支持可修改性的设计概念39
3.5.1 可修改性策略40
3.5.2 可修改性模式41
3.6 支持安全性的设计理念42
3.6.1 安全策略42
3.6.2 安全模式44
3.7 支持可集成性的设计理念45
3.7.1 可集成性策略45
3.7.2 集成模式47
3.8 总结48
3.9 扩展阅读48
3.10 讨论问题49
第4章 架构设计过程50
4.1 对具备原则性的方法的需求50
4.2 属性驱动设计3.0版本51
4.2.1 步骤1:审查输入51
4.2.2 步骤2:通过选择驱动因素
建立迭代目标52
4.2.3 步骤3:选择系统元素进行细化53
4.2.4 步骤4:选择满足选定驱动
因素的设计概念53
4.2.5 步骤5:实例化架构元素、分配
职责并定义接口53
4.2.6 步骤6:绘制视图草图并记录
设计决策54
4.2.7 步骤7:执行当前设计分析,
并审查迭代目标和设计目标
的实现情况54
4.2.8 必要时进行迭代54
4.3 在不同的系统环境中应用属性
驱动设计55
4.3.1 面向成熟领域的全新系统设计55
4.3.2 面向新兴领域的全新系统设计57
4.3.3 面向现有系统的变更设计57
4.3.4 替换遗留应用程序的设计58
4.4 识别和选择设计概念58
4.4.1 设计概念的识别58
4.4.2 设计概念的选择59
4.5 生成结构61
4.5.1 实例化元素62
4.5.2 分配功能并识别属性63
4.5.3 建立元素间的关系63
4.6 定义接口63
4.6.1 外部接口63
4.6.2 内部接口63
4.7 在设计过程中创建初步文档67
4.7.1 记录视图草图67
4.7.2 记录设计决策69
4.8 跟踪设计进度70
4.8.1 使用架构待办事项列表70
4.8.2 设计看板的使用71
4.9 总结72
4.10 扩展阅读72
4.11 讨论问题73
第5章 以API为中心的设计74
5.1 业务敏捷性74
5.1.1 从项目转向产品75
5.1.2 业务敏捷性的驱动因素75
5.2 以API为中心的设计关注点76
5.2.1 API和可组合性76
5.2.2 API优先设计77
5.2.3 以API为中心的设计概念82
5.2.4 API管理85
5.3 以API为中心的设计和ADD87
5.3.1 ADD和API规范设计87
5.3.2 在以API为中心的设计的其他
领域使用ADD88
5.4 总结89
5.5 扩展阅读89
5.6 讨论问题90
第6章 可部署性设计91
6.1 可部署性原则和架构设计91
6.1.1 可部署性的定义91
6.1.2 持续集成、部署和交付93
6.1.3 可部署性设计的探讨94
6.2 支持可部署性的设计决策95
6.2.1 可部署性策略96
6.2.2 可部署性模式97
6.3 可部署性和ADD102
6.4 总结104
6.5 扩展阅读104
6.6 讨论问题105
第7章 设计基于云的解决方案106
7.1 云计算概述106
7.1.1 什么是云计算106
7.1.2 服务模型107
7.1.3 托管资源108
7.2 驱动因素和云108
7.2.1 质量属性108
7.2.2 约束条件109
7.3 基于云的设计概念111
7.3.1 外部开发组件:云功能111
7.3.2 策略114
7.3.3
前言/序言
前 言
距离本书第1版问世已过多年,在此期间,我们在技术领域见证了云架构、物联网(IoT)架构、DevOps、人工智能/机器学习(AI/ML)、容器、微服务等众多技术的兴起。那么,我们在当时提出的建议现在仍然适用吗?可以说,既适用也不适用。
我们认为,设计软件架构的原则和实践并未发生改变,因此,本书的支撑框架—属性驱动设计的方法也不会改变。在过去的几年里,成千上万名从业者掌握了该方法,并成功地将该方法应用到许多工业项目中。读者反馈的内容一直都是很积极的,我们并未收到修改该方法的请求,这令我们倍感欣慰。然而,当下软件设计所处的技术环境与背景确实发生了改变。
如今,很少有人会设计一个完全独立的系统。大多数情况下,你只需在现有框架和工具包的基础上进行构建,并集成一些现成的组件(可能是开源的)。更常见的情况是,你构建的系统需要与其他系统进行实时交互,甚至可能需要共享资源。很可能你正在使用某种敏捷开发的方法来构建系统,这意味着你的系统将会被频繁修改,并进行定期更新和发布。你构建的系统架构可能涉及物联网系统、移动系统、云和容器化系统或自适应性系统。当然,你所使用的软件可能也已经非常老旧,并且多年来积累了许多技术债务。
基于以上原因,我们认为有必要撰写第2版,以适应当今架构决策中需要考虑的诸多新背景。在新版本中,我们针对以下内容增加了新的章节:通过以 API 为中心的设计支持业务敏捷性、可部署性、基于云的解决方案,以及解决设计中的技术债务问题。
在本次修订中,我们还新增了两个全新背景下的研究案例,以此来深入探讨当前背景下的架构挑战。在第8章中的“酒店定价系统”研究案例中,通过采用部署在云基础设施上的微服务架构,实现了该系统的大部分功能,旨在实现服务的跨环境迁移和高可用性。在第9章中介绍的“数字孪生平台” 研究案例中,我们则进一步探讨了更多的架构挑战:物联网、云计算、大数据分析、人工智能/机器学习、扩展现实(XR)、仿真、高级自动化以及机器人技术,它们构成了一个庞大而复杂的系统。因此,单个架构师是远远不够的,该系统需要一个汇聚了各个领域专业知识的大型架构团队来协同支持。在每个案例中,我们将展示ADD方法如何以规范的方式将设计挑战转变为现实。
我们衷心希望本书能够让你自信、从容地应对各种项目规模下的架构设计挑战!