编辑推荐
《软件构架实践(第3版 影印版)》特色主题:
◆软件构架的背景:技术角度、项目角度、业务角度和专业角度
◆软件构架的竞争力:对于个人和组织的意义
◆业务目标的依据及其对软件构架的影响
◆软件构架层面的重要需求及其确定方式
◆软件生命周期中的构架,包括以设计思维为前提的生成一测试:实现期间的软件构架一致性:构架与测试j构架与敏捷开发
◆构架与当前技术潮流(比如云计算,社交网络和终端用户设备)
内容简介
《软件构架实践(第3版 影印版)》是一本荣获大奖且影响深远的经典,目前已经全面修订,充分体现了这一领域的最新进展。基于软件开发的真实现状,《软件构架实践(第3版 影印版)》再次以全新的角度引入软件构架的相关概念和最佳实践,阐述软件系统是如何架构的,软件系统中的各个要素之间又是如何相互作用的。有别于实现细节、算法和数据表示,软件构架是达成高品质软件的关键,是一种可重用于后续软件系统的资产,对软件企业的商业策略至关重要。
作者围绕着软件构架影响周期的概念对本书前一版进行了重构。每个周期都表明了软件构架是如何产生影响的,同时它又受哪些因素的影响。软件构架在特定的背景下发挥着关键性的作用。这些背景包括技术环境、项目的生命周期、组织的业务概况和架构师的专业实践。作者还进一步延展了质量属性,仍然以构架理念为中心(用单独一章内容来专门介绍每个属性),进一步拓宽了软件构架模式。
如果要参与或者负责大型软件系统的设计、开发和管理,你会发现这本书是很有价值的参考资源,可以帮助你紧跟技术潮流。
内页插图
目录
preface
reader’s guide
acknowledgments
part one: introduction
chapter 1: what is software architecture?
1.1 what software architecture is and what it isn’t
1.2 architectural structures and views
1.3 architectural patterns
1.4 what makes a “good” architecture?
1.5 summary
1.6 for further reading
1.7 discussion questions
chapter 2: why is software architecture important?
2.1 inhibiting or enabling a system’s quality attributes
2.2 reasoning about and managing change
2.3 predicting system qualities
2.4 enhancing communication among stakeholders
2.5 carrying early design decisions
2.6 defining constraints on an implementation
2.7 influencing the organizational structure
2.8 enabling evolutionary prototyping
2.9 improving cost and schedule estimates
2.10 supplying a transferable, reusable model
2.11 allowing incorporation of independently developed components
2.12 restricting the vocabulary of design alternatives
2.13 providing a basis for training
2.14 summary
2.15 for further reading
2.16 discussion questions
chapter 3: the many contexts of software architecture
3.1 architecture in a technical context
3.2 architecture in a project life-cycle context
3.3 architecture in a business context
3.4 architecture in a professional context
3.5 stakeholders
3.6 how is architecture influenced?
3.7 what do architectures influence?
3.8 summary
3.9 for further reading
3.10 discussion questions
part two: quality attributes
chapter 4: understanding quality attributes
4.1 architecture and requirements
4.2 functionality
4.3 quality attribute considerations
4.4 specifying quality attribute requirements
4.5 achieving quality attributes through tactics
4.6 guiding quality design decisions
4.7 summary
4.8 for further reading
4.9 discussion questions
chapter 5: availability
5.1 availability general scenario
5.2 tactics for availability
5.3 a design checklist for availability
5.4 summary
5.5 for further reading
5.6 discussion questions
chapter 6: interoperability
6.1 interoperability general scenario
6.2 tactics for interoperability
6.3 a design checklist for interoperability
6.4 summary
6.5 for further reading
6.6 discussion questions
chapter 7: modifiability
7.1 modifiability general scenario
7.2 tactics for modifiability
7.3 a design checklist for modifiability
7.4 summary
7.5 for further reading
7.6 discussion questions
chapter 8: performance
8.1 performance general scenario
8.2 tactics for performance
8.3 a design checklist for performance
8.4 summary
8.5 for further reading
8.6 discussion questions
chapter 9: security
9.1 security general scenario
9.2 tactics for security
9.3 a design checklist for security
9.4 summary
9.5 for further reading
9.6 discussion questions
chapter 10: testability
10.1 testability general scenario
10.2 tactics for testability
10.3 a design checklist for testability
10.4 summary
10.5 for further reading
10.6 discussion questions
chapter 11: usability
11.1 usability general scenario
11.2 tactics for usability
11.3 a design checklist for usability
11.4 summary
11.5 for further reading
11.6 discussion questions
chapter 12: other quality attributes
12.1 other important quality attributes
12.2 other categories of quality attributes
12.3 software quality attributes and system quality attributes
12.4 using standard lists of quality attributes–or not
12.5 dealing with “x-ability”: bringing a new quality attribute into the fold
12.6 for further reading
12.7 discussion questions
chapter 13: architectural tactics and patterns
13.1 architectural patterns
13.2 overview of the patterns catalog
13.3 relationships between tactics and patterns
13.4 using tactics together
13.5 summary
13.6 for further reading
13.7 discussion questions
chapter 14: quality attribute modeling and analysis
14.1 modeling architectures to enable quality attribute analysis
14.2 quality attribute checklists
14.3 thought experiments and back-of-the-envelope analysis
14.4 experiments, simulations, and prototypes
14.5 analysis at different stages of the life cycle
14.6 summary
14.7 for further reading
14.8 discussion questions
part three: architecture in the life cycle
chapter 15: architecture in agile projects
15.1 how much architecture?
15.2 agility and architecture methods
15.3 a brief example of agile architecting
15.4 guidelines for the agile architect
15.5 summary
15.6 for further reading
15.7 discussion questions
chapter 16: architecture and requirements
16.1 gathering asrs from requirements documents
16.2 gathering asrs by interviewing stakeholders
16.3 gathering asrs by understanding the business goals
16.4 capturing asrs in a utility tree
16.5 tying the methods together
16.6 summary
16.7 for further reading
16.8 discussion questions
chapter 17: designing an architecture
17.1 design strategy
17.2 the attribute-driven design method
17.3 the steps of add
17.4 summary
17.5 for further reading
17.6 discussion questions
chapter 18: documenting software architectures
18.1 uses and audiences for architecture documentation
18.2 notations for architecture documentation
18.3 views
18.4 choosing the views
18.5 combining views
18.6 building the documentation package
18.7 documenting behavior
18.8 architecture documentation and quality attributes
18.9 documenting architectures that change faster than you can document them
18.10 documenting architecture in an agile development project
18.11 summary
18.12 for further reading
18.13 discussion questions
chapter 19: architecture, implementation, and testing
19.1 architecture and implementation
19.2 architecture and testing
19.3 summary
19.4 for further reading
19.5 discussion questions
chapter 20: architecture reconstruction and conformance
20.1 architecture reconstruction process
20.2 raw view extraction
20.3 database construction
20.4 view fusion
20.5 architecture analysis: finding violations
20.6 guidelines
20.7 summary
20.8 for further reading
20.9 discussion questions
chapter 21: architecture evaluation
21.1 evaluation factors
21.2 the architecture tradeoff analysis method
21.3 lightweight architecture evaluation
21.4 summary
21.5 for further reading
21.6 discussion questions
chapter 22: management and governance
22.1 planning
22.2 organizing
22.3 implementing
22.4 measuring
22.5 governance
22.6 summary
22.7 for further reading
22.8 discussion questions
part four: architecture and business
chapter 23: economic analysis of architectures
23.1 decision-making context
23.2 the basis for the economic analyses
23.3 putting theory into practice: the cbam
23.4 case study: the nasa ecs project
23.5 summary
23.6 for further reading
23.7 discussion questions
chapter 24: architecture competence
24.1 competence of individuals: duties, skills, and knowledge of architects
24.2 competence of a software architecture organization
24.3 summary
24.4 for further reading
24.5 discussion questions
chapter 25: architecture and software product lines
25.1 an example of product line variability
25.2 what makes a software product line work?
25.3 product line scope
25.4 the quality attribute of variability
25.5 the role of a product line architecture
25.6 variation mechanisms
25.7 evaluating a product line architecture
25.8 key software product line issues
25.9 summary
25.10 for further reading
25.11 discussion questions
part five: the brave new world
chapter 26: architecture in the cloud
26.1 basic cloud definitions
26.2 service models and deployment options
26.3 economic justification
26.4 base mechanisms
26.5 sample technologies
26.6 architecting in a cloud environment
26.7 summary
26.8 for further reading
26.9 discussion questions
chapter 27: architectures for the edge
27.1 the ecosystem of edge-dominant systems
27.2 changes to the software development life cycle
27.3 implications for architecture
27.4 implications of the metropolis model
27.5 summary
27.6 for further reading
27.7 discussion questions
chapter 28: epilogue
references
about the authors
index
前言/序言
探索软件世界的坚实基石:一本关于构建可伸缩、可维护、高性能系统的深度指南 在飞速发展的数字时代,软件系统已渗透到我们生活的方方面面,从支撑全球经济运行的金融交易平台,到连接亿万用户的社交网络,再到驱动智能设备的物联网应用,它们都依赖于坚固且精巧的架构设计。然而,构建这些庞大而复杂的系统并非易事。它需要的不只是代码的堆砌,更是对系统整体蓝图的深刻理解,对未来演进方向的审慎规划,以及对潜在风险的提前预警。这本著作,正是为那些渴望深入理解软件架构精髓、掌握构建卓越软件系统能力的开发者、架构师和技术领导者量身打造。 本书不仅仅是一本讲述“如何写代码”的指导书,它更是一本深入剖析“如何构建、管理和演进软件系统”的实践指南。它将带你穿越技术迷雾,从宏观的视角审视软件开发的本质,理解架构在整个软件生命周期中的核心作用。你将学会如何将模糊的业务需求转化为清晰、可执行的技术架构,如何平衡不同约束条件下的取舍,以及如何构建能够经受住时间和市场考验的软件。 核心理念与价值:为何架构如此重要? 在深入探讨具体架构模式和技术之前,本书首先会为你构建一个坚实的理论基础。它会清晰地阐述软件架构的核心概念,解释为何一个优秀的架构是实现项目成功、降低开发成本、提高产品质量和加速产品迭代的关键。你将了解到,架构不仅仅是技术选择的集合,更是关于沟通、决策和权衡的艺术。它影响着团队的协作方式、项目的可维护性、系统的可扩展性,以及最终用户体验的质量。 本书强调,架构决策并非一蹴而就,而是贯穿于整个软件生命周期。从早期概念验证到最终的系统退役,每一个阶段都需要架构师的审慎考量和积极参与。你将理解,一个“好”的架构,应当具备以下关键特质: 可理解性: 架构应该清晰易懂,让团队成员能够快速理解系统的整体结构和各部分之间的关系。 可维护性: 系统应该易于修改、更新和修复,能够适应不断变化的需求和技术环境。 可扩展性: 系统应该能够随着用户量、数据量或业务复杂度的增长而平滑地扩展,而不会导致性能瓶颈或设计崩溃。 可测试性: 架构应该支持高效的单元测试、集成测试和端到端测试,确保软件的质量和稳定性。 性能: 系统应该在满足业务需求的前提下,具备良好的响应速度和资源利用效率。 安全性: 架构应该从设计之初就考虑安全因素,抵御潜在的威胁和攻击。 可部署性: 系统应该能够方便地部署到生产环境,并且易于监控和管理。 理解这些核心价值,是迈向优秀软件架构的第一步。本书将通过丰富的案例和深入的分析,让你亲身体验这些价值的实现过程。 核心原则与实践:构建卓越系统的基石 本书的核心内容聚焦于软件架构设计中的关键原则和实践。你将系统地学习到如何应用这些原则来指导你的设计决策: 模块化设计: 如何将一个复杂的系统分解成相互独立、职责清晰的模块,降低耦合度,提高复用性。你将了解不同的模块化策略,如按功能划分、按领域划分等,并学习如何评估它们的优劣。 关注点分离 (Separation of Concerns): 如何将不同的功能或职责分配到不同的组件或层中,使得每个部分只关注自身的核心任务,从而提高代码的可读性和可维护性。 高内聚、低耦合 (High Cohesion, Low Coupling): 这是模块化设计的核心原则。你将深入理解如何设计内聚性高的模块(模块内部的元素紧密相关,共同完成一个功能)和低耦合的模块(模块之间的依赖性最小),从而构建灵活且易于修改的系统。 抽象与封装 (Abstraction and Encapsulation): 如何通过抽象来隐藏实现的复杂性,并通过封装来保护内部数据和逻辑,只暴露必要的接口。你将学习如何设计有效的抽象层,以及如何利用封装来提高系统的安全性和可维护性。 设计模式的智慧:本书将深入探讨各种经典和现代的设计模式,并结合实际应用场景,解释它们是如何解决常见的架构问题,提升代码质量和设计灵活性。你将不仅仅是了解模式的表面,更能理解其背后的设计思想和适用范围。 架构演进: 软件系统不是静态的,它们需要随着时间的推移而不断演进。本书将为你提供如何管理架构变更、应对技术债务、以及如何进行逐步重构的策略和技巧,确保你的系统能够持续适应新的挑战。 架构风格与模式:应对不同挑战的利器 不同的业务需求和技术场景,需要不同的架构风格和模式。本书将系统地介绍几种主流的架构风格,并深入分析它们各自的特点、优势、劣势以及适用场景: 分层架构 (Layered Architecture): 这是最常见的一种架构风格,将系统划分为不同的逻辑层,如表示层、业务逻辑层、数据访问层等。你将学习如何有效地设计和管理这些层,以及如何处理层与层之间的通信。 客户端-服务器架构 (Client-Server Architecture): 这种模式在Web应用和分布式系统中扮演着核心角色。你将了解如何设计健壮的客户端和服务器端,以及如何优化它们之间的通信。 事件驱动架构 (Event-Driven Architecture, EDA): 在需要高响应性、解耦和异步处理的场景下,EDA尤为重要。你将深入学习事件的发布、订阅、处理机制,以及如何构建可靠的事件流。 微服务架构 (Microservices Architecture): 近年来备受关注的微服务架构,将大型应用拆分成一系列小型、独立部署的服务。本书将详细探讨微服务的设计原则、挑战(如服务发现、分布式事务、监控)以及应对策略。 面向服务架构 (Service-Oriented Architecture, SOA): 在企业级应用集成中,SOA扮演着重要角色。你将了解如何设计和管理服务,以及如何实现不同系统之间的互操作性。 领域驱动设计 (Domain-Driven Design, DDD): DDD强调将软件设计与业务领域紧密结合,通过建立通用的语言来促进沟通和理解。你将学习如何识别领域模型、构建限界上下文,以及如何利用DDD来解决复杂业务问题。 本书不会仅仅停留在对这些架构风格的表面介绍,而是会深入剖析它们在实际应用中的演进和变体,帮助你根据具体情况做出最优选择。 技术选型与决策:架构师的智慧 在架构设计过程中,技术选型是一个至关重要的环节。本书将为你提供一套系统性的技术选型框架和方法论: 理解权衡 (Understanding Trade-offs): 任何技术选择都伴随着权衡。你将学会如何识别和评估不同的技术选项(如编程语言、数据库、消息队列、缓存技术等)的优缺点,并根据项目的具体需求和约束条件做出明智的决策。 避免技术滥用: 并非最新最流行的技术就是最好的。本书将帮助你识别过度工程化的风险,以及如何选择最适合当前问题且易于维护的技术方案。 考虑生态系统与社区: 一个成熟的技术生态系统和活跃的社区,能够为项目的长期发展提供有力的支持。你将学习如何评估一个技术的生态系统和社区的健康度。 面向未来: 在做出技术选型时,需要考虑到未来的发展趋势和潜在的变化。本书将引导你思考如何选择具有长期生命力的技术。 架构治理与团队协作:将蓝图变为现实 一个优秀的架构设计,最终需要通过高效的团队协作和有效的治理才能转化为成功的软件产品。本书将探讨如何: 建立清晰的沟通机制: 确保架构师、开发者、产品经理等各方之间的有效沟通,消除误解,达成共识。 制定和维护架构文档: 如何创建清晰、准确且易于理解的架构文档,为团队提供指导和参考。 进行架构评审: 如何组织和参与架构评审会议,及时发现和解决潜在的设计问题。 应对技术债务: 技术债务是软件开发中不可避免的挑战。你将学习如何识别、量化和管理技术债务,以及如何制定偿还计划。 构建学习型组织: 鼓励团队不断学习新知识、新技能,共同提升软件架构的设计和实现能力。 结语 本书旨在为你提供一套全面、深入的软件架构知识体系,让你能够从容应对各种复杂的软件开发挑战。它不仅仅是一本技术手册,更是一本关于如何思考、如何决策、如何构建可持续发展的软件系统的哲学指南。阅读本书,你将掌握识别和解决架构问题的关键技能,学习如何设计出健壮、可扩展、高性能且易于维护的软件系统,从而在激烈的市场竞争中脱颖而出,成为一名真正优秀的软件架构师。这趟探索软件世界的深度之旅,将为你带来前所未有的启迪和力量。