我正在尝试掌握越来越多的领域驱动设计并遵循最佳实践。到目前为止,这是我的理解:
- 聚合是相互关联的实体的集合。
- 聚合的根是将聚合关系绑定在一起的实体。
- 如果根被删除,聚合范围内的所有内容也必须被删除
- 聚合根只能通过身份相互引用
我的问题是:
如果我有多个彼此相关的聚合,比如说订单和产品类别。
应用服务应该如何处理订单和相关产品类别的检索?
服务是否应该引用订单和产品类别的每个存储库,首先检索订单,然后检索产品类别,最后填写引用两者信息的数据传输对象?
像这样的东西:
public OrderDto GetOrder(int id)
{
var order = _orderRepo.GetById(id);
var productCategory = _categoryRepo.GetById(order.ProductCategoryId);
return new OrderDto
{
CustomerName = order.CustomerName,
ProductCategoryName = productCategory.Name,
*..etc..*
};
}
或者,如果它们紧密相关,那么保持解耦的根是否过度?
或者 UI 是否应该调用独立服务以获得完整的画面?