简介:软件体系结构是软件工程中描述系统高层组织的核心概念。本文系统梳理它的经典定义、构件组成、研究视角及与工程术语的差异,帮助开发者理解全局结构设计如何影响系统的演化、性能与可维护性。
软件体系结构是具有一定形式的结构化元素的集合,这些元素被称为构件。它并不仅仅是一张框图,而是一种用于描述系统高层组织的抽象规范,关注的是系统由哪些部分组成、这些部分如何交互,以及指导其设计与演化的原则。
从构成上看,软件体系结构通常包含三类基本构件:
这一“处理—数据—连接”的划分方法,是理解软件体系结构最基础的切入点,其核心思想在其他定义与方法中基本得到了保持。
需要说明的是,软件体系结构在学术研究中常被称为“软件体系结构”,而在工程实践中更常被称为“软件架构”。二者的外文名相同,在相关国际标准中的定义均为:“一个系统的基础组织,包含各个构件、构件互相之间与环境的关系,还有指导其设计和演化的原则。”可见,术语差异并不改变其本质内涵。
随着软件系统规模扩大,单纯依靠算法设计和数据结构设计已无法应对整体复杂性。软件体系结构正是为了填补这一空白而出现:它位于算法与数据结构之上,处理的是关于整体系统结构设计和描述方面的问题。
如果缺乏明确的体系结构,系统往往会出现以下问题:
因此,软件体系结构的意义在于:在编码之前,先对系统的全局组织、控制结构、通信协议、数据存取方式以及设计元素的组织做出系统性决策。
由于软件体系结构尚无公认的唯一权威定义,不同学者从不同侧面进行了刻画,理解这些视角有助于建立完整认知。
1. 设计层次视角
有学者认为,软件体系结构是软件设计过程中的一个层次,这一层次超越计算过程中的算法设计和数据结构设计。体系结构问题包括总体组织和全局控制、通讯协议、同步、数据存取,给设计元素分配特定功能,设计元素的组织、规模和性能,以及在各设计方案间进行选择等。
2. 多角度描述视角
有研究指出,软件体系结构可以从四个角度来描述系统:
这四个角度并非互斥,而是同一系统的不同切面,共同构成完整的体系结构视图。
3. 抽象规范视角
另有观点认为,软件体系结构是一个抽象的系统规范,主要包括用其行为来描述的功能构件,以及构件之间的相互连接、接口和关系。这一定义强调行为描述与接口契约的重要性。
4. 结构与演化视角
还有定义指出,软件体系结构是一个程序或系统各构件的结构、它们之间的相互关系,以及进行设计的原则和随时间进化的指导方针。这一表述将“静态结构”与“动态演化”统一起来,突出了体系结构的生命周期属性。
5. 需求与约束视角
也有学者提出,一个软件体系结构包括软件和系统构件、互联及约束的集合,一个系统需求说明的集合,以及一个基本原理,用以说明这一构件、互联和约束能够满足系统需求。这一视角将体系结构与需求满足性直接关联。
软件体系结构的运行逻辑可以概括为:构件定义职责,连接件定义交互,约束定义边界,原则指导演化。
以一个通用的分层结构为例,可用伪代码示意其组织方式:
系统 = 分层结构层1: 接入层 —— 处理构件:请求解析、路由层2: 业务层 —— 处理构件:业务逻辑;数据构件:领域对象层3: 数据层 —— 数据构件:持久化数据;连接构件:数据访问接口连接规则:上层只能通过定义好的接口调用下层同层之间通过消息或事件进行通信约束:禁止跨层直接访问接口变更需评估对上层的影响
在这个示意中,处理构件承担计算职责,数据构件承载状态,连接构件负责调用与消息传递,而分层规则和接口约束则构成设计原则。体系结构的价值,正是通过这些抽象元素及其关系,让复杂系统变得可理解、可讨论、可评估。
软件体系结构适用于以下场景:
| 对比项 | 软件体系结构 | 软件架构 |
|---|---|---|
| 外文名 | software architecture | software architecture |
| 使用场景 | 学术研究领域居多 | 工程实践领域居多 |
| 核心内涵 | 构件、关系、设计原则、演化指导 | 同上 |
| 标准定义 | 系统的基础组织及指导原则 | 同标准定义 |
二者本质相同,差异主要体现在语境与习惯用法上。在标准定义层面,二者均指向系统的基础组织、构件关系及设计与演化原则。
在实践中理解和应用软件体系结构时,需要关注以下几点:
软件体系结构是具有一定形式的结构化元素集合,以处理构件、数据构件和连接构件为核心组成,关注系统的高层组织、构件关系及设计与演化原则。它既是一种抽象规范,也是一种设计层次,更是一种指导系统演化的方法论。
理解软件体系结构,关键在于把握“是什么、由什么组成、如何交互、遵循什么原则”这四个问题。无论称之为软件体系结构还是软件架构,其核心价值都在于:在复杂性与可理解性之间建立桥梁,让系统在满足需求的同时具备良好的演化能力。