微服务与DDD的关系分析
微服务与DDD的关系分析
核心概念对比
1
2
3
4
5
6
7DDD(领域驱动设计) 微服务架构
┌────────────────┐ ┌────────────────┐
│ - 限界上下文 │ 映射关系 │ - 服务边界 │
│ - 领域模型 │ ═══════► │ - 服务接口 │
│ - 聚合根 │ │ - 数据模型 │
│ - 领域事件 │ │ - 消息通信 │
└────────────────┘ └────────────────┘设计思路对比
1
2
3
4
5DDD思路:
业务驱动 ──► 领域划分 ──► 模型设计 ──► 技术实现
微服务思路:
服务拆分 ──► 接口定义 ──► 服务实现 ──► 服务治理实践案例
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38// DDD风格的领域模型
public class Order {
private OrderId orderId;
private UserId userId;
private Money totalAmount;
private List<OrderItem> items;
private OrderStatus status;
public void place() {
// 业务规则验证
validateOrder();
// 状态变更
this.status = OrderStatus.PLACED;
// 发布领域事件
DomainEvents.publish(
new OrderPlacedEvent(this)
);
}
}
// 微服务风格的服务实现
public class OrderService {
private OrderRepository orderRepository;
private OrderMapper orderMapper;
public OrderDTO createOrder(CreateOrderCommand cmd) {
Order order = orderMapper.toEntity(cmd);
orderRepository.save(order);
return orderMapper.toDTO(order);
}
}主要区别
1
2
3
4
5
6
7
8┌────────────┬───────────────┬───────────────┐
│ 维度 │ DDD │ 微服务 │
├────────────┼───────────────┼───────────────┤
│设计重点 │ 领域逻辑 │ 服务边界 │
│技术关注点 │ 业务规则 │ 技术实现 │
│边界划分 │ 业务边界 │ 部署边界 │
│通信方式 │ 领域事件 │ API接口 │
└────────────┴───────────────┴───────────────┘结合使用
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30// 1. 领域层(DDD)
public class OrderDomain {
// 领域模型
public class OrderId {
private final String value;
}
// 领域服务
public interface OrderDomainService {
Order createOrder(OrderCommand cmd);
}
}
// 2. 应用层(微服务)
public class OrderController {
private OrderApplicationService orderService;
public ResponseEntity<OrderDTO> createOrder(
CreateOrderRequest request
) {
OrderCommand cmd = OrderCommand.from(request);
OrderDTO result = orderService.createOrder(cmd);
return ResponseEntity.ok(result);
}
}最佳实践
1
2
3
4
5
6
7
8
9
10
11
12
13
141. 服务划分
DDD: 按限界上下文划分
微服务: 按服务能力划分
结合: 限界上下文→微服务边界
2. 数据管理
DDD: 聚合根管理数据一致性
微服务: 数据库隔离
结合: 每个微服务一个聚合根
3. 通信方式
DDD: 领域事件
微服务: REST/RPC
结合: 同步+异步通信协作模式
1
2
3
4
5
6
7
8
9
10
11┌─────────────────────────────────────┐
│ 微服务架构 │
│ ┌────────────┐ ┌────────────┐ │
│ │ 订单服务 │ │ 支付服务 │ │
│ └────────────┘ └────────────┘ │
│ DDD实现 DDD实现 │
│ │ │ │
│ └───────┬───────┘ │
│ ▼ │
│ 领域事件通信 │
└─────────────────────────────────────┘