定义
导航方向(Navigability)表示类之间是否、以及如何相互访问。
简单理解:
“谁知道谁” 或 “谁能访问谁”。
UML 中的三种导航类型
类型 | UML箭头 | Java实现 | 含义 |
单向导航 | A --> B | A 持有 B 的引用 | A 可以访问 B |
双向导航 | A <--> B | A、B 互相持有引用 | 双方可以访问对方 |
无导航 | A -- B | 无引用关系 | 仅逻辑存在 |
示例:单向导航
- 含义:
- Customer 可以访问 Order;
- Order 不知道 Customer 的存在。
- Java 实现:
- 优点:
- 低耦合,依赖方向清晰。
- 推荐在大多数业务场景中使用。
示例:双向导航
- 含义:
- Customer 可以访问自己的订单;
- Order 也能知道它属于哪个顾客。
- Java 实现:
- 注意:
- 双向关系常出现在 ORM(JPA/Hibernate)中;
- 需避免序列化时的无限递归问题(如使用
@JsonIgnore)。
导航方向的设计建议
场景 | 推荐方向 | 说明 |
普通业务逻辑 | 单向导航 | 低耦合、易维护 |
ORM数据库实体 | 双向导航 | 方便外键映射 |
边界模块访问 | 单向导航 | 保持模块独立 |
只需逻辑表示 | 无导航 | 高层概念建模 |
实际系统示例:购物系统类图
- 说明:
Customer通过单向导航访问OrderOrder通过单向导航访问OrderItemOrderItem引用Product- 所有导航均为单向、低耦合设计
- Java实现:
总结:导航性设计核心原则
原则 | 说明 |
✅ 单向优先 | 只让需要访问的类持有引用 |
✅ 控制依赖 | 避免双向互相访问 |
✅ 明确多重性 | 用 1、0..1、0..* 表示数量 |
✅ ORM例外 | 双向导航可用于数据库外键映射 |
✅ 关注数据流 | 导航方向应反映数据流向 |
- Author:CoderWdd
- URL:https://www.wuinsights.top//article/577757d8-2d82-41f9-9532-5f1acd147fa0
- Copyright:All articles in this blog, except for special statements, adopt BY-NC-SA agreement. Please indicate the source!
Relate Posts