【2025软考高级架构师】——软件架构设计(4)
摘要
本文主要介绍了几种软件架构设计相关的概念和方法。包括C2架构风格的规则,模型驱动架构(MDA)的起源、目标、核心模型及各模型之间的关系;软件架构复用的概念、历史发展、维度、类型及相关过程;特定领域架构(DSSA)的定义、基本活动及产出物、类型等。
1. 软件架构概念
架构的本质
- 软件架构为软件系统提供了一个结构、行为和属性的高级抽象。
- 软件架构风格是特定应用领域的惯用模式,架构定义一个词汇表和一组约束。
架构的作用
- 软件架构是项目干系人进行交流的手段。
- 软件架构是可传递和可复用的模型,通过研究软件架构可能预测软件的质量。
- 软件架构使推理和控制的更改更加简单,有助于循序渐进的原型设计,可以作为培训的基础。
软件架构设计是【降低成本】、【改进质量】、【按时和按需交付产品】的关键因素。架构设计就是需求分配,即将满足需求的职责分配到组件上。
2. 软件架构设计与生命周期
2.1. 软件设计中4+1 视图是哪些?
2.1.1. 逻辑视图(Logical View)
- 目的:描述系统的功能需求和静态结构,关注“系统做什么”。
- 核心内容:
-
- 类图(Class Diagram)
- 用例图(Use Case Diagram)
- 对象图(Object Diagram)
- 应用场景:定义模块划分、类职责、接口设计等。例如,在电商系统中,定义用户、订单、商品等核心类及其关系。
- 示例:(用户类与订单类关联,订单类包含商品列表)
2.1.2. 开发视图(Development View)
- 目的:描述系统的代码结构,关注“开发者如何组织代码”。
- 核心内容:
-
- 组件图(Component Diagram)
- 包图(Package Diagram)
- 构建工具链(如 Maven/Gradle 配置)
- 应用场景:划分模块边界、依赖管理、代码复用。例如,将电商系统分为用户服务、订单服务、支付服务等独立模块。
- 示例:(用户服务模块依赖数据库访问模块)
2.1.3. 进程视图(Process View)
- 目的:描述系统的运行时行为,关注“系统如何动态协作”。
- 核心内容:
-
- 活动图(Activity Diagram)
- 状态图(State Diagram)
- 线程/进程交互图
- 应用场景:分析并发、同步、通信机制。例如,电商系统下单时的库存扣减与支付异步处理流程。
- 示例:(用户下单后触发库存检查进程和支付进程并行执行)
2.1.4. 物理视图(Physical View)
- 目的:描述系统的物理部署和硬件拓扑,关注“系统如何运行在真实环境中”。
- 核心内容:
-
- 部署图(Deployment Diagram)
- 网络拓扑图
- 服务器配置(如负载均衡、数据库集群)
- 应用场景:
设计服务器架构、数据库分片、缓存策略。例如,电商系统部署在 AWS 上,使用 RDS 数据库和 CDN 加速静态资源。 - 示例:(用户请求通过负载均衡器分发到多台 Web 服务器)
2.1.5. +1 场景视图(Use Case View)
- 目的:通过典型场景串联其他视图,关注“系统如何应对用户需求”。
- 核心内容:
-
- 用例图(Use Case Diagram)
- 用户故事(User Story)
- 场景描述(Scenario Description)
- 应用场景:验证架构设计是否满足关键业务场景。例如,电商系统的“下单支付”场景需覆盖库存扣减、支付成功回调等流程。
- 示例:(用户登录→选择商品→提交订单→支付→生成订单)
2.2. 架构描述语言ADL
3. 基于架构的软件开发方法(ABSD)
- ABSD方法是架构驱动,即强调由业务【商业】、质量和功能需求的组合驱动架构设计。
- ABSD方法有三个基础。
-
- 第一个基础是功能的分解。在功能分解中,ABSD方法使用已有的基于模块的内聚和耦合技术;
- 第二个基础是通过选择架构风格来实现质量和业务需求;
- 第三个基础是软件模板的使用。
- 视角与视图:从不同的视角来检查,所以会有不同的视图。
- 用例用来捕获功能需求、特定场景【刺激、环境、响应】用来捕获质量需求。