组件图是什么
组件图按可替换的部件描述系统结构:组件、端口、提供接口(棒棒糖符号)、需求接口(插座符号)以及装配连接件。它适合表达模块边界与依赖方向,而不是类之间的实现细节,在评审分层、检查反向依赖时比类图更直观。
基本信息
| 组件 | 可独立替换与部署的逻辑单元,用 component 构造型标注 |
|---|---|
| 端口 | 组件对外交互的接入点,可约定协议与版本 |
| 提供接口 | 棒棒糖符号,表示组件对外暴露的能力 |
| 需求接口 | 插座符号,表示组件依赖的外部能力 |
| 装配连接件 | 把提供接口与需求接口连起来的连接线 |
PlantUML 示例
PlantUML 示例
@startuml
component "订单 Web" as web
component "订单服务" as order {
port "api" as api
port "db" as db
}
component "库存服务" as stock
interface "下单接口" as iOrder
web --> iOrder # Web 只依赖接口,不依赖具体实现
iOrder -- order # 接口由订单服务提供
order --> stock : gRPC # 服务间调用走 gRPC
order --> db : SQL # 组件内部通过端口访问数据库
@enduml典型使用场景
- 分层评审:检查是否出现从底层指向上层的反向依赖
- 微服务拆分:以组件为候选服务,评估接口与部署单元是否对齐
- 接口治理:标注每个组件对外提供的接口与版本
- 上线单元规划:确定哪些组件必须同批部署
- 对外讲解:用少量组件讲清系统全貌,比类图更容易被非研发理解
看图先看什么
评审组件图先看箭头方向:上层依赖下层是正常的,出现下层指向上层就说明分层已被破坏。再看公共组件被谁依赖:被所有组件依赖的工具组件往往承担了过多职责,会成为变更瓶颈。最后看接口归属:接口由谁提供、谁消费、版本如何演进,这三条决定组件能否独立替换。
组件图是检查依赖方向的工具:如果所有组件都依赖同一个工具组件,说明这个公共层承担了过多职责,正在变成隐形的上帝类。