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

yrdbyhpb  于 12个月前  发布在  Go
关注(0)|答案(1)|浏览(83)

我们有订购和发票子域。
我们需要访问订单以创建发票。从发票应用程序服务访问订单的正确方法是什么?
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.在发票子域中有自定义订单实体/value_object吗?如果这是正确的解决方案,是否有任何点,在有单独的子域或它都应该是一个?
谢谢

bnlyeluc

bnlyeluc1#

从其他子域获取实体的正确方法?
通常,正确的答案是你没有。
也就是说,我们通常希望共享信息的副本(即:实体的当前值),而不一定也共享改变该信息的能力。换句话说,我们通常会分享价值观,而不是实体。
因此,大多数代码都希望有一些facade来隐藏提供orderId如何产生发票子域所需信息的细节,但该facade不一定是 repository(即,不一定是类似于内存中可变实体集合的抽象)。

相关问题