DDD:从其他子域获取实体的正确方法?

问题描述 投票:0回答:1

我们有订购和发票子域。

我们需要访问订单才能创建发票。从发票应用程序服务访问订单的正确方法是什么?

  1. 发票应用程序服务是否依赖于订购服务。
type invoicingService struct {
  orderingService OrderingService
}

func (s *invoicingService) CreateInvoice(orderID) (...) {
  order, err := s.orderingService.Get(ctx, orderID)
}
  1. 发票应用程序服务依赖于订单存储库。
type invoicingService struct {
  orders OrderRepository
}

func (s *invoicingService) CreateInvoice(orderID) (...) {
  order, err := s.orders.Get(ctx, orderID)
}
  1. 发票子域内有自定义订单实体/值对象吗?如果这是正确的解决方案,那么拥有单独的子域是否有任何意义,或者都应该是一个?

谢谢

go domain-driven-design ddd-service applicationservice
1个回答
0
投票

从其他子域获取实体的正确方法?

通常,正确的答案是你不这样做。

也就是说,我们通常希望共享信息的副本(即:实体的当前值),但不一定共享更改该信息的能力。换句话说,我们通常会共享价值观而不是实体。

因此,您的大多数代码都希望有一些外观来隐藏提供 orderId 如何生成发票子域所需的信息的详细信息,但该外观不一定是存储库(即,不会)必然是一个抽象,类似于内存中可变实体的集合)。

© www.soinside.com 2019 - 2024. All rights reserved.