PlantUML组件连接方式详解:依赖、接口、组装与委托
PlantUML组件间连接方式详解
组件图是描述软件架构的重要工具,而组件间的连接方式则是组件间交互关系的可视化表达。本文将深入讲解PlantUML中四种核心连接方式及其应用场景。
1. 依赖关系(Dependency)的箭头样式
依赖关系是最基础的连接类型,表示一个组件在某种方式上依赖于另一个组件。
语法示例
@startuml
[订单服务] --> [支付服务] : 调用支付API
[库存服务] ..> [数据库] : 数据持久化
@enduml
箭头样式说明
-->
实线箭头:强依赖关系(编译期依赖)..>
虚线箭头:弱依赖关系(运行时动态依赖)--
无箭头实线:双向依赖(应尽量避免)..
无箭头虚线:临时性关联
实践建议
- 避免循环依赖,可使用
!include
拆分复杂组件 - 对关键依赖添加注释说明协议类型(如REST/gRPC)
- 使用颜色标记不同环境依赖(如测试环境用黄色)
@startuml
skinparam component {
BackgroundColor TestEnv<<Test>> #FFFACD
}
[客户端] -[#red]-> [API网关] <<Production>>
[测试工具] -[#008000]-> [API网关] <<Test>>
@enduml
2. 提供/使用接口(Provides/Requires)连接
这种连接方式明确表示组件间的接口契约,比普通依赖更规范。
显式接口示例
@startuml
interface "支付接口" as Payment {
+ processPayment()
}
[订单服务] ..|> Payment
[支付服务] ..|> Payment
@enduml
隐式接口示例
@startuml
component [订单服务] {
[提供接口] .. UP : 订单查询
[需要接口] .. DOWN : 支付服务
}
component [支付服务] {
[提供接口] .. UP : 支付服务
}
[订单服务] DOWN -- [支付服务] UP
@enduml
最佳实践
- 关键业务接口建议使用显式定义
- 简单内部接口可用隐式表示减少图形复杂度
- 接口命名应遵循
<动作><资源>
模式(如getUserInfo
)
3. 组装连接器(Assembly Connector)
用于展示组件内部部件如何通过接口连接,适合复杂组件内部设计。
典型用法
@startuml
component "订单系统" {
component "订单处理器" as Processor
component "验证服务" as Validator
Processor -- Validator : 验证请求
Validator -- Processor : 验证结果
}
[Web前端] --> Processor : 提交订单
@enduml
高级技巧
使用
()
表示内部连接点:component A { (输入端口) (输出端口) }
嵌套组件连接:
component A { component B { (port1) } B.port1 -- A.(extPort) }
4. 委托连接器(Delegation Connector)
表示将外部请求委托给内部组件处理,常见于Facade模式。
基础示例
@startuml
component "API网关" as Gateway {
interface "路由接口" as Router
component "负载均衡器" as LB
Router -down-> LB : 委托调用
}
[移动客户端] -> Gateway.Router
@enduml
端口委托示例
@startuml
component "智能家居系统" {
portin 用户指令
component "语音识别模块"
用户指令 --> 语音识别模块 : 指令转译
}
@enduml
使用建议
- 明确标注委托方向(
-up->
或-down->
) - 对关键委托链路添加序号表示调用顺序
- 组合使用端口和接口提高可读性
综合应用案例
@startuml
!define AWSPREFIX https://raw.githubusercontent.com/awslabs/aws-icons-for-plantuml/v14.0/dist
!includeurl AWSPREFIX/Compute/EC2.puml
!includeurl AWSPREFIX/Database/RDS.puml
component "电商平台" {
[订单服务] as Order
[支付服务] as Payment
interface "支付接口" as PI {
+ process()
+ refund()
}
Order --> PI
Payment .up.|> PI
}
EC2("前端服务器") --> Order : HTTPS
RDS("订单数据库") <-- Order : JDBC
@enduml
连接方式选择指南
连接类型 | 适用场景 | 注意事项 |
---|---|---|
依赖关系 | 快速草图、简单系统 | 容易产生歧义 |
提供/使用接口 | 明确接口契约的架构 | 需要维护接口定义 |
组装连接器 | 复杂组件内部设计 | 可能造成图形过于复杂 |
委托连接器 | 代理模式、Facade模式 | 需要明确委托方向 |
建议在架构设计的不同阶段采用不同连接方式:
- 初期探索:使用简单依赖关系
- 详细设计:转换为接口连接
- 实现阶段:补充组装和委托关系
通过合理运用这些连接方式,可以构建出既准确反映系统架构又易于理解的组件图。
评论已关闭