ONEPSOFT | 软考学习知识库
deepread1|论文1 软件架构设计(架构风格选型论证)详解
对应清单条目:#1 论文·软件架构设计(架构风格选型论证:分层/管道 - 过滤器/事件驱动/微服务/CQRS)
教材来源:《系统架构设计师教程(第 2 版)》第 1 章 1.1、第 7 章 7.1–7.3
一、知识点定位
一句话定位:软件架构设计的核心动作之一,就是从一组 " 惯用组织模式(架构风格)" 里,挑出最贴合业务场景的那个,并讲清楚为什么选它、不选别的。
二、教材原文精摘(跨章节,原封不动)
【第 1 章 1.1 系统架构概述】原文:
系统架构 (System Architecture) 是系统的一种整体的高层次的结构表示,是系统的骨架和根基……架构设计在系统开发过程中起着关键性作用,架构设计的优劣决定了系统的健壮性和生命周期的长短。
架构是体现在组件中的一个系统的基本组织、它们彼此的关系与环境的关系及指导它的设计和发展的原则。
【第 7 章 7.1.1 软件架构的定义】原文:
Bass、Clements 和 Kazman 对于……软件体系结构给出了如下的定义:一个程序和计算系统软件体系结构是指系统的一个或者多个结构。结构中包括软件的构件,构件的外部可见属性以及它们之间的相互关系。
体系结构并非可运行软件。确切地说,它是一种表达,使软件工程师能够:(1) 分析设计在满足所规定的需求方面的有效性;(2) 在设计变更相对容易的阶段,考虑体系结构可能的选择方案;(3) 降低与软件构造相关联的风险。
【第 7 章 7.3.1 软件架构风格概述】原文:
软件体系结构风格是描述某一特定应用领域中系统组织方式的惯用模式。体系结构风格定义一个系统家族,即一个体系结构定义一个词汇表和一组约束。词汇表中包含一些构件和连接件类型,而这组约束指出系统是如何将这些构件和连接件组合起来的。
对软件体系结构风格的研究和实践促进对设计的重用,一些经过实践证实的解决方案也可以可靠地用于解决新的问题。例如,如果某人把系统描述为 " 客户/服务器 " 模式,则不必给出设计细节,人们立刻就会明白系统是如何组织和工作的。
【第 7 章 7.3.2 数据流体系结构风格】原文:
数据流体系结构风格主要包括批处理风格和管道 - 过滤器风格。
批处理风格:每个处理步骤是一个单独的程序,每一步必须在前一步结束后才能开始,并且数据必须是完整的,以整体的方式传递。
管道 - 过滤器风格:把系统分解为几个序贯的处理步骤,这些步骤之间通过数据流连接,一个步骤的输出是另一个步骤的输入。每个处理步骤由一个过滤器 (Filter) 实现……管道 (Pipe) 负责数据传输。
【第 7 章 7.3.2 层次型 / C-S】原文(同属 " 调用 - 返回 " 大类):
层次系统组成一个层次结构,每一层为上层提供服务,并作为下层的客户……由于每一层最多只影响两层,同时只要给相邻层提供相同的接口,允许每层用不同的方法实现,这同样为软件重用提供了强大的支持。
三层 C/S 结构增加了一个应用服务器。整个应用逻辑驻留在应用服务器上……表示层、功能层和数据层三层逻辑上独立。
【第 7 章 7.3.4 以数据为中心(黑板)风格】原文:
黑板体系结构风格适用于解决复杂的非结构化的问题,能在求解过程中综合运用多种不同知识源……它将问题的解空间组织成一个或多个应用相关的分级结构。黑板系统的传统应用是信号处理领域,如语音识别和模式识别。
【第 7 章 7.3.5 虚拟机风格】原文:
虚拟机体系结构风格的基本思想是人为构建一个运行环境,在这个环境之上,可以解析与运行自定义的一些语言,这样来增加架构的灵活性。虚拟机体系结构风格主要包括解释器风格和规则系统风格……解释器通常被用来建立一种虚拟机以弥合程序语义与硬件语义之间的差异。其缺点是执行效率较低。典型的例子是专家系统。
【第 7 章 7.3.6 独立构件风格】原文:
独立构件风格主要强调系统中的每个构件都是相对独立的个体,它们之间不直接通信,以降低耦合度,提升灵活性。主要包括进程通信和事件系统风格。
事件系统风格……基于事件的隐式调用风格的思想是构件不直接调用一个过程,而是触发或广播一个或多个事件。系统中的其他构件中的过程在一个或多个事件中注册,当一个事件被触发,系统自动调用在这个事件中注册的所有过程。
【第 7 章 7.2 ABSD 体系结构设计(选型落点)】原文:
在建立体系结构的初期,选择一个合适的体系结构风格是首要的。在这个风格的基础上,开发人员通过体系结构模型,可以获得关于体系结构属性的理解。
体系结构设计是一个迭代过程……提出软件体系结构模型 → 把已标识的构件映射到软件体系结构中 → 分析构件之间的相互作用 → 产生软件体系结构 → 设计评审。
三、系统解读(逐段讲透)
核心一句话总结:架构风格选型,就是给系统选一套 " 已经被验证过的组织套路 ",选对了后期改起来便宜、质量属性有保障,选错了就是推倒重来——所以论文要你 " 论证 ",本质是逼你想清楚 " 为什么是它而不是别的 "。
四、工程实践举例(土木工程视角)
最直观的对照就是盖楼时选 " 结构体系 ":
知识点 ↔ 工程实践 对照表
| 教材知识点要素 | 你的实践场景对应 | 映射说明 |
|---|---|---|
| 架构风格(惯用组织模式) | 建筑结构体系(框架/剪力墙/钢结构) | 都是 " 解决某类问题的典型、被验证过的组织方式 " |
| 数据流风格(管道 - 过滤器) | 混凝土拌合→运输→泵送→浇筑流水线 | 前步产出是后步输入,数据/物料顺序流 |
| 调用 - 返回(层次/C-S) | 业主—总包—分包/劳务 三层管理 | 层间只认相邻接口,内部可替换,重用性强 |
| 以数据为中心(黑板) | BIM 协同平台(多方围绕共享模型) | 多知识源围绕共享数据工作,适合非结构化协作 |
| 虚拟机风格 | 设计院参数化制图规则引擎 | 构建运行环境 " 解释 " 自定义语言,灵活但效率折损 |
| 独立构件(事件系统) | 工地 " 停工令 " 事件广播 | 构件不直接调用,发事件、订阅者各自响应,耦合低 |
| ABSD:先选风格再落地评审 | 先定结构体系→出图→图审 | 选型在第一步,后期变更成本随阶段指数上升 |
当知识点涉及顺序流程时,补充流程对比(ABSD 体系结构设计 ↔ 土木工程结构选型落地):
流程图(结构化呈现)
教材ABSD流程
土木工程实践
对应关系
| 节点A | 关系 | 节点B |
|---|---|---|
| 提出软件体系结构模型\n首选合适风格 | 对应 | 确定结构体系\n框架/剪力墙/钢结构 |
| 已标识构件映射到架构 | 对应 | 划分单体与构件\n柱梁板墙 |
| 分析构件相互作用 | 对应 | 确定构件受力关系\n传力路径 |
| 产生软件体系结构 | 对应 | 出结构施工图 |
| 设计评审 | 对应 | 施工图审查 |
运维视角提示:风格选错对 " 运维服务 " 伤害最大。例如用 " 调用 - 返回单体 " 硬扛高并发,后期要做成 " 独立构件/事件驱动 " 去解耦扩容,改造量等于重建;而一开始按质量属性(可用性、可修改性)选对风格,运维期的故障隔离、灰度发布会轻松得多——这正好呼应第 8 章质量属性与 ATAM。