这些 确实可以理解为“语言”,但不是 Java、Python 那种用来写业务代码的编程语言,也不是单纯的架构图。
它们属于:
ADL:Architecture Description Language,架构描述语言。
更准确地说,它们是一类用于描述软件架构的形式化或半形式化建模语言,主要描述:
经典 ADL 研究认为,ADL 关注的是软件系统的概念架构,区别于具体代码实现;它通常提供具体语法和概念框架,用来表达组件、连接件、配置等架构元素。(加州大学欧文分校信息与计算机科学学院)
例如:
这些都是 ADL 的代表。
它们不是普通画图工具,而是带有一定语法和语义的描述语言。部分 ADL 有文本语法,部分可以配合图形化工具显示,但核心不是“画图”,而是用更严谨的方式表达架构结构和行为。
可以这样理解:
| 类型 | 作用 | 严谨程度 |
|---|---|---|
| 白板图 / 方框箭头图 | 表达大概结构 | 低 |
| UML 组件图 / 部署图 | 标准化建模 | 中 |
| ADL | 形式化/半形式化描述架构 | 高 |
| 代码 | 实现系统功能 | 最高但细节过多 |
ADL 出现的原因,就是传统“方框 + 箭头”的架构图太随意,难以做一致性检查、行为分析、接口匹配和架构验证。分布式组件系统研究中也把 ADL 描述为用于替代非正式 box-and-line 图的形式化记法。(University of Ioannina)
可以记住一个核心公式:
软件架构 = 组件 + 连接件 + 配置 + 约束组件表示系统里的计算单元或数据单元。
例如:
用户服务
订单服务
支付服务
库存服务
数据库
消息消费者连接件表示组件之间如何交互。
例如:
HTTP 调用
RPC 调用
消息队列
事件总线
管道
共享数据库
函数调用配置表示组件和连接件如何组合成整体结构。
例如:
订单服务 → 通过 RPC → 调用支付服务
订单服务 → 通过 MQ → 发送订单创建事件
库存服务 → 订阅订单创建事件约束表示架构规则。
例如:
前端不能直接访问数据库
业务服务只能通过网关暴露接口
支付模块不能直接依赖具体支付渠道实现C2SADL 通常指用于描述 C2 架构风格 的架构描述语言。更严格地说,有资料称其全称为 C2SADEL,即用于 C2 架构风格建模的 ADL。(SMU)
C2 架构风格主要关注:
你可以把它理解成:
专门用来描述 C2 风格架构的语言。
类似于:
组件 A
↓ 消息
连接件 X
↓ 消息
组件 B它不是通用编程语言,而是描述某种架构风格下组件如何通过连接件交互。
Wright 是一种偏形式化的架构描述语言,特点是特别重视 连接件 Connector 的语义。
它会描述:
Wright 的形式化语义与 CSP:Communicating Sequential Processes,通信顺序进程 有关,因此它可以用来检查架构交互是否一致、协议是否兼容。相关研究说明 Wright 通过形式化语义支持类似类型检查的架构兼容性检查。(CMU School of Computer Science)
你可以把它理解成:
一个特别擅长描述“组件之间怎么交互、交互协议是否正确”的 ADL。
例如订单服务和支付服务之间不能随便通信,需要遵守协议:
订单服务发送支付请求
支付服务返回支付结果
订单服务根据结果更新订单状态Wright 关心的是这种交互过程是否严谨、是否会冲突、是否可能死锁。
UniCon 是一种围绕 组件和连接件 组织的 ADL。它的语言参考手册明确说明:UniCon 是一种架构描述语言,核心构造就是 components 和 connectors;组件表示计算和数据的位置,连接件表示组件之间的交互类别。(CMU School of Computer Science)
UniCon 强调:
你可以把 UniCon 理解成:
架构级“装配说明书”。
它不只是说“订单服务调用支付服务”,还会更严谨地描述:
订单服务提供哪些接口
支付服务需要哪些接口
二者通过什么连接件连接
连接方式是否匹配UniCon 相关论文也提到,这类记法需要识别组件和连接件,并检查组件的 players 与连接件的 roles 是否匹配。(CMU School of Computer Science)
Rapide 是斯坦福相关研究中的一种 ADL,偏重于 事件驱动、动态行为、架构仿真和一致性检查。
Rapide 的官方介绍说明,它用于支持大型、多语言系统的基于组件开发,通过架构定义作为开发框架,并支持把系统实现与形式化架构进行比较。(智能与复杂事件处理)
它强调:
你可以把 Rapide 理解成:
用“事件流”来描述和验证架构行为的 ADL。
例如在电商系统中:
用户下单事件
库存扣减事件
支付成功事件
订单确认事件
发货事件Rapide 会更关注这些事件如何发生、顺序是否合理、系统行为是否符合架构设计。
Darwin 是一种偏向 分布式系统配置描述 的 ADL。经典论文中把 Darwin 描述为一种声明式绑定语言,用来定义由互连组件组成的层次化组合结构。(Springer)
它强调:
你可以把 Darwin 理解成:
描述分布式系统中组件如何组合、绑定和部署的语言。
例如:
客户端组件绑定到网关组件
网关组件绑定到业务服务组件
业务服务组件绑定到数据库组件它更关注“系统由哪些分布式组件组成,以及它们如何连接”。
| 名称 | 本质 | 重点 | 可以这样理解 |
|---|---|---|---|
| C2SADL / C2SADEL | C2 风格架构描述语言 | C2 架构风格、组件、连接件、消息 | 描述 C2 风格系统结构 |
| Wright | 形式化 ADL | 连接件语义、交互协议、兼容性检查 | 检查组件交互是否严谨 |
| UniCon | 架构装配型 ADL | 组件、连接件、接口匹配、工具支持 | 架构级装配说明书 |
| Rapide | 事件驱动 ADL | 事件、动态行为、仿真、一致性 | 用事件流验证架构行为 |
| Darwin | 分布式配置型 ADL | 组件绑定、层次组合、分布式系统 | 描述分布式组件如何连接 |
普通架构图:
用户 → 网关 → 服务 → 数据库它的问题是:
ADL 则希望把这些内容表达得更精确。
例如它会关心:
组件 A 提供接口 IA
组件 B 需要接口 IA
连接件 C 负责 A 和 B 的通信
连接件 C 的协议要求:请求必须先于响应所以 ADL 比普通图更接近“可分析的架构模型”。
| 对比项 | UML | ADL |
|---|---|---|
| 目标 | 通用建模 | 专门描述软件架构 |
| 表达方式 | 图为主,也有语义 | 文本语法 + 形式语义 + 工具支持 |
| 关注点 | 类、对象、用例、组件、部署等 | 组件、连接件、配置、约束、架构风格 |
| 严谨性 | 中等 | 通常更形式化 |
| 自动分析 | 有限 | 更强调一致性检查、仿真、验证 |
简单说:
UML 更像通用建模图谱,ADL 更像架构层面的专业描述语言。
你备考系统架构设计师时,不需要深入掌握每种 ADL 的语法。重点是理解它们在“软件架构描述与表示”里的位置。
C2SADL、Wright、UniCon、Rapide、Darwin 都是典型的软件架构描述语言 ADL,用于描述软件系统的高层架构,主要表达组件、连接件、配置、接口、约束和行为等架构要素。它们不是普通程序设计语言,也不是单纯图表,而是用于形式化或半形式化表示架构的建模语言。
ADL = 用语言描述架构
核心 = 组件 + 连接件 + 配置 + 约束
作用 = 比普通架构图更严谨,可支持分析、验证、仿真和工具处理
代表 = C2SADL、Wright、UniCon、Rapide、Darwin可以把它们理解成:
普通架构图:草图
UML:标准图纸
ADL:带规则、语法和检查能力的工程图纸说明书
代码:最终施工结果所以你看到 C2SADL、Wright、UniCon、Rapide、Darwin 时,第一反应应该是:
这些不是让程序员日常写业务代码的语言,而是软件架构研究领域中用于精确描述和分析架构的 ADL。
加载评论中...