软件架构简介
本节课将讨论软件架构和REST。
在本章中,我们将介绍构建基于 REST 的软件架构的基本要点。
- 我们将探讨什么是软件架构。
- 接着,我们将学习如何为 RESTful Web 服务选择合适的框架:Web 框架、业务层技术以及持久化机制。
- 最后,我们将回顾一些常见的设计模式与最佳实践,并了解本课程涵盖的应用架构。
本章的目标是为后续关于使用 REST 架构风格进行数据驱动开发的讨论建立背景。
什么是软件架构?
软件架构指的是软件系统的高层级构成要素。如同现实世界中的建筑结构,软件架构定义了软件组件的高层系统结构,规范了组件层次的设计方法,并对这一结构进行文档化。它还形成了一套架构设计决策,展示系统的结构及其背后的逻辑依据。
在产品开发初期,架构师会创建一个软件架构,作为项目技术需求的设计与开发基础。
非功能性需求
回顾软件开发的发展历程,早期主要关注功能需求和数据驱动的流程。然而,现代应用开发已将关注点扩展到一系列质量属性,包括:
- 可扩展性
- 可靠性
- 性能
- 可伸缩性
- 可维护性
- 可用性
- 安全性
- 向后兼容性
- 易用性
这些属性在软件架构中起着关键作用,通常被称为非功能性需求。
随着时间推移,出现了许多针对功能与非功能性需求的架构模式与风格。软件架构通常建立在这些经过验证的架构机制之上,具有坚实的基础。
如何选择合适的架构
不良的架构可能带来诸多风险,例如系统不稳定、无法满足当前或未来的业务需求,或难以管理生产环境。
当架构师最初分析新系统的需求时,应评估是否可以利用现有的成熟架构模式来设计和实现该用例。
由于在项目后期更改架构需要耗费大量时间和成本,因此这一初始阶段至关重要。在构建软件架构时必须格外谨慎,因为架构不仅成本高昂,而且难以修改,一旦出错可能危及整个应用。
软件架构的目标不应仅限于基本功能,还应具备灵活性,能够适应新的业务需求和挑战。例如,正在开发的系统可能需要在一年内将注册用户数量翻倍。
- 架构中的每个组件应具有单一职责,或聚合一致的功能。
- 特定组件不应了解其他组件的内部细节。
- 应避免重复,特定功能应在唯一且相关的模块中实现。
选择正确软件架构的重要性
利益相关者之间的有效沟通是良好架构的关键。正如软件架构设计有成熟的模式与最佳实践可供参考一样,降低复杂性的最常用方法是分离关注点和视角,使不同利益相关方能够分别处理各自关心的部分。
现代产品开发不再采用“一次性大设计”的方式,而是倡导敏捷方法,将设计拆分为更小的单元。这种方法还能通过建模技术和可视化手段降低风险。例如,系统可首先使用企业建模工具(如 Enterprise Architect 或 Rational Rose)进行草图设计。
整个团队可以并行工作,利用这些工具描述设计与架构。最终,所构建的架构可通过成熟的技术进行评估,例如 软件架构分析方法(SAAM)。
SAAM 是 20 世纪 90 年代首次被记录的软件架构分析方法,用于分析非功能性需求以及系统的可变更性。关于这些技术的深入讨论超出了本课程的范围。
下一课我们将开始探讨 REST 架构。