微服务与DDD的关系分析

微服务与DDD的关系分析

  1. 核心概念对比

    1
    2
    3
    4
    5
    6
    7
    DDD(领域驱动设计)              微服务架构
    ┌────────────────┐ ┌────────────────┐
    │ - 限界上下文 │ 映射关系 │ - 服务边界 │
    │ - 领域模型 │ ═══════► │ - 服务接口 │
    │ - 聚合根 │ │ - 数据模型 │
    │ - 领域事件 │ │ - 消息通信 │
    └────────────────┘ └────────────────┘
  2. 设计思路对比

    1
    2
    3
    4
    5
    DDD思路:
    业务驱动 ──► 领域划分 ──► 模型设计 ──► 技术实现

    微服务思路:
    服务拆分 ──► 接口定义 ──► 服务实现 ──► 服务治理
  3. 实践案例

    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风格的领域模型
    @Aggregate
    public class Order {
    @AggregateId
    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)
    );
    }
    }

    // 微服务风格的服务实现
    @Service
    public class OrderService {
    @Autowired
    private OrderRepository orderRepository;
    @Autowired
    private OrderMapper orderMapper;

    public OrderDTO createOrder(CreateOrderCommand cmd) {
    Order order = orderMapper.toEntity(cmd);
    orderRepository.save(order);
    return orderMapper.toDTO(order);
    }
    }
  4. 主要区别

    1
    2
    3
    4
    5
    6
    7
    8
    ┌────────────┬───────────────┬───────────────┐
    │ 维度 │ DDD │ 微服务 │
    ├────────────┼───────────────┼───────────────┤
    │设计重点 │ 领域逻辑 │ 服务边界 │
    │技术关注点 │ 业务规则 │ 技术实现 │
    │边界划分 │ 业务边界 │ 部署边界 │
    │通信方式 │ 领域事件 │ API接口 │
    └────────────┴───────────────┴───────────────┘
  5. 结合使用

    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 {
    // 领域模型
    @Value
    public class OrderId {
    private final String value;
    }

    // 领域服务
    public interface OrderDomainService {
    Order createOrder(OrderCommand cmd);
    }
    }

    // 2. 应用层(微服务)
    @RestController
    @RequestMapping("/api/orders")
    public class OrderController {
    @Autowired
    private OrderApplicationService orderService;

    @PostMapping
    public ResponseEntity<OrderDTO> createOrder(
    @RequestBody CreateOrderRequest request
    ) {
    OrderCommand cmd = OrderCommand.from(request);
    OrderDTO result = orderService.createOrder(cmd);
    return ResponseEntity.ok(result);
    }
    }
  6. 最佳实践

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    1. 服务划分
    DDD: 按限界上下文划分
    微服务: 按服务能力划分
    结合: 限界上下文→微服务边界

    2. 数据管理
    DDD: 聚合根管理数据一致性
    微服务: 数据库隔离
    结合: 每个微服务一个聚合根

    3. 通信方式
    DDD: 领域事件
    微服务: REST/RPC
    结合: 同步+异步通信
  7. 协作模式

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    ┌─────────────────────────────────────┐
    │ 微服务架构 │
    │ ┌────────────┐ ┌────────────┐ │
    │ │ 订单服务 │ │ 支付服务 │ │
    │ └────────────┘ └────────────┘ │
    │ DDD实现 DDD实现 │
    │ │ │ │
    │ └───────┬───────┘ │
    │ ▼ │
    │ 领域事件通信 │
    └─────────────────────────────────────┘