乐于分享
好东西不私藏

【软件系统架构】系列十三:系统架构设计——软件架构概念

【软件系统架构】系列十三:系统架构设计——软件架构概念

一、软件架构概念

1.定义

  • 软件架构是软件系统的高层抽象,描述系统的结构、行为和属性。

  • 架构由构件(组件)、连接子(组件间的交互)、设计模式及约束组成。

  • 作用:

  • 指定系统组织结构和拓扑。

  • 显示系统需求与构件之间的对应关系。

  • 为设计决策提供基本原则。

  • 目标:解决软件复用、质量、可维护性问题。

2.架构设计本质

  • 是需求分配过程:将满足需求的职责分配到组件上。
  • 是从需求分析到设计实现的桥梁。
  • 不同于可运行软件,是分析、选择和推理设计的表达工具。

3.软件架构层次

  • 数据设计:定义数据构件或类,封装属性与操作。
  • 体系结构设计:关注构件的结构、属性和交互。

二、软件架构设计的作用

  • 提供系统结构的可选方案,便于技术与非技术人员交流。
  • 决定开发和维护的组织结构。
  • 约束系统质量属性(性能、可靠性、安全等)。
  • 便于原型开发、设计变更和知识传递。
  • 支持软件复用和质量预测软件。

三、软件架构与生命周期

1.需求分析阶段

核心目标
  • 从问题空间到解空间的过渡:把用户需求、业务流程和功能需求转化为可实现的架构设计模型。
关键活动
  • 识别系统需求与质量属性(性能、可用性、安全性等)。
  • 构建初步的架构视图,标识关键构件及其交互关系。
  • 进行需求与架构模型的可追踪性映射,确保设计决策可验证。
关注点与价值
  • 架构设计早期介入可降低后续系统风险。
  • 便于多方沟通:技术人员、产品经理和用户理解系统结构。
  • 形成初步蓝图,为后续设计提供方向。

2.设计阶段

核心目标
  • 将架构思想具体化,形成可分析、可复用的架构模型。
关键活动
  • 构件与连接子设计:定义组件功能和接口,明确组件间交互方式。
  • 架构描述语言(ADL)使用:标准化描述系统的构件、连接关系和约束。
  • 多视图建模:通过逻辑视图、部署视图、模块视图等全面展示系统结构。
关注点与价值
  • 架构决策记录:哪些构件承担哪些职责,如何互相通信。
  • 支持架构分析(性能、安全性、可维护性)。
  • 为实现阶段提供清晰设计蓝图,并便于复用设计经验。

3.实现阶段

核心目标
  • 将架构模型转化为可运行的系统。
关键活动
  • 基于架构的开发支持:项目组织、配置管理、版本控制策略。
  • 架构到实现映射:将构件映射到具体代码模块、服务或中间件平台。
  • 架构驱动测试:通过架构模型指导单元测试、集成测试和性能验证。
关注点与价值
  • 保证架构决策在实现中落地,避免”架构漂移”。
  • 提高开发效率和一致性,减少重复开发。
  • 支持质量属性验证,确保系统性能和可靠性符合预期。

4.构件组装阶段

核心目标
  • 在架构模型指导下,将可复用构件组装为完整系统。
关键活动
  • 构件互联和连接子实现:保证组件间通信正确。
  • 构件失配检测与修复:处理接口不兼容、功能冲突或全局假设冲突。
  • 构件部署策略优化:确保部署过程高效、安全。
关注点与价值
  • 提升复用性:构件可以在不同系统中重复使用。
  • 减少集成风险:架构模型作为蓝图降低组装错误。
  • 确保系统整体一致性和可维护性。

5.部署阶段

核心目标
  • 将系统安装到软硬件环境,并确保其稳定运行。
关键活动
  • 架构视图指导部署方案:逻辑视图、组件依赖关系、运行环境需求。
  • 分析部署方案质量属性:负载均衡、容错性、安全性。
  • 优化部署策略:物理服务器/虚拟机分布、容器化方案、云平台资源分配。
关注点与价值
  • 提前发现潜在性能瓶颈或安全隐患。
  • 支持系统扩展与运维规划。
  • 提供清晰的部署文档,减少部署错误。

6.后开发阶段(维护与演化)

核心目标
  • 确保系统长期稳定运行,支持演化和复用。
关键活动
  • 动态软件体系结构:支持运行时重配置和系统自适应调整。
  • 例:根据业务负载自动调整服务实例数量。
  • 架构恢复与重建:对未按架构设计开发的系统进行架构分析和重建。
  • 方法包括手工分析、工具辅助、查询语言提取或数据挖掘。
关注点与价值
  • 提升系统灵活性与可维护性。
  • 支持持续演化,满足新业务需求。
  • 为系统迁移、升级和复用提供基础。

7.软件架构与生命周期

四、构件(Component)

1.构件的定义

  • 构件是独立可交付的功能单元,外界通过接口访问其提供的服务。
  • 可以由一组原子构件组成,原子构件是部署、版本控制和替换的最小单位
  • 构件强调可复用性、独立部署性,适合系统级组件化设计。

2.构件的特性

(1)独立部署单元
  • 构件可单独部署或与同类构件一起部署。
  • 便于版本管理、替换和升级。
(2)接口驱动
  • 外部只能通过公开接口访问构件功能,不直接依赖内部实现。
  • 强调封装性和模块化。
(3)无外部可见状态
  • 构件内部状态对外不可见,保证组件间低耦合。
(4)复用性
  • 构件可在不同系统中重复使用,减少开发成本。
(5)组装单元
  • 构件可以作为第三方可组装单元,支持大型系统集成。

3.构件的分类

类型 定义 特点
原子构件
最小部署单元,包含模块和资源
可单独部署,支持版本控制和替换
模块
一组类或函数集合,不一定有资源
逻辑组织单位,便于开发和维护
构件家族
一组相关原子构件集合
一次部署通常包含整个家族,便于管理

区别:原子构件强调部署单元,模块强调逻辑组织,构件家族强调组合与整体管理。

4.构件与对象的区别

特性 构件 对象
单位
独立部署单元
实例单元
状态
无外部可见状态
可能有外部可见状态
封装
提供接口服务
封装自身状态与行为
生命周期
持续可复用
随程序实例创建和销毁
组成
可包含多个类元素
属于单一类
关注点
系统集成、复用、部署
功能实现和业务逻辑

5.构件的部署与复用策略

(1)独立部署
  • 构件可单独升级或替换,降低系统维护风险。
(2)组装复用
  • 通过统一接口和协议,构件可以在不同系统中复用。
(3)版本管理
  • 每个构件维护独立版本,支持依赖管理。
(4)连接与互操作
  • 构件之间通过连接子(Connector)通信,实现低耦合集成。
(5)失配检测
  • 在组装阶段,需要检查接口、协议或全局假设是否失配,并修复。

6.构件设计原则

  • 单一职责原则:每个构件承担单一功能。
  • 高内聚、低耦合:构件内部功能紧密相关,外部依赖最小。
  • 接口隔离:提供清晰、简洁、稳定的接口。
  • 可替换性:可在不影响其他系统的情况下替换构件。
  • 复用优先:构件设计时考虑跨项目复用。

7.构件生命周期

说明:

  • 左侧展示系统中已部署的构件(v1),右侧展示运行时升级或重配置的构件(v2)。
  • 使用箭头表示部署、替换与重配置关系
  • 注释标明构件版本、状态和功能,便于理解动态演化。
  • 展示了构件支持的长期演化与运行时适应性,贴合后开发阶段(动态软件体系结构)的概念。

五、总结

  • 软件架构是系统设计的核心桥梁,是分析、沟通、决策的工具。
  • 架构设计贯穿软件生命周期,从需求分析到维护。
  • 构件是架构的基本单位,区分于对象和模块,强调复用、部署独立性与接口服务。