系统设计超越任何特定工具或文档;它是一个持续的过程,概述了复杂系统的高级概念结构(系统架构),并定义了其重要组件和交互。它涵盖了系统的所有方面(即软件、硬件、数据、接口和用户交互),以确保它们有效、高效地协同工作,以满足应用程序的要求。
该过程的输出可能包括:
- 系统需求文档(即详细说明功能性和非功能性需求。)
- 系统架构文档(即描述所选架构背后的目标、约束和原理。)
- 系统架构图(即提供组件、服务及其交互和关系的可视化表示。)
然而,系统设计应注重前期和持续的系统设计评审,不断记录和重新审视系统要求、决策、权衡和妥协。评估系统的技术可行性、功能和性能并识别依赖关系和风险以做出明智决策是软件开发中必不可少的一步。
传统图表工具的局限性
随着系统规模和团队需求的发展,传统图表工具的局限性变得更加明显:
- 缺乏实时更新:图表提供静态表示,不能自动反映现代系统的动态特性。
- 笨重的用户界面:更新图表可能很麻烦,需要花费大量时间进行格式化和排列组件。
- 版本控制问题:跨团队维护更新版本具有挑战性。
- 有限的协作能力:实时协作和反馈通常需要更好的支持。
- 没有单一的事实来源。图表很少包含有关需求、权衡、设计决策等的信息。通常使用设计文档。
- 无法管理云资源:图表无法控制或生成基础设施代码(例如,CloudFormation、Terraform)。
这类似于了解汽车的工作原理:您不需要知道每个细节,但您应该能够检查引擎盖下方以诊断问题,尤其是无需每次都将汽车送回经销商处。因此,我们需要能够将抽象与深入研究技术堆栈的能力相结合的复杂工具。这些工具应提供有关任何组件、结构或关系的最新信息,并促进协作解决问题。
随着现代软件系统的复杂性不断增加,越来越多的团队将面临传统图表工具的局限性。这些工具曾经是展示想法和设计的必备工具,但仍需要改进才能捕捉到系统的全部复杂性,从而阻碍开发人员全面理解、设计、开发和管理系统。