2

在领域驱动设计中,实体的集合属性是否允许具有部分值?

例如,Customer.Orders、Post.Comments、Graph.Vertices 等属性是否应该始终包含所有订单、评论、顶点,或者是否允许包含今天的订单、最近的评论、孤立的顶点?

相应地,存储库是否应该提供类似的方法

GetCustomerWithOrdersBySpecification
GetPostWithCommentsBefore

ETC。?

4

2 回答 2

2

我不认为 DDD 告诉你这样做或不这样做。这在很大程度上取决于您正在构建的系统以及您需要解决的具体问题。

我什至没有听说过这方面的模式。

从主观的角度来看,我会说实体应该是完整的定义(考虑延迟加载),并且可以完全或部分加载到 DTO,以优化发送给客户端的数据量。但是,如果可以解决某些问题,我不介意从数据库中加载部分实体。

于 2009-06-11T20:45:26.317 回答
2

请记住,领域驱动设计也有服务的概念。为了执行某些数据库查询,最好将问题建模为服务而不是附加到父对象的子对象集合。

一个很好的例子可能是通过接受多个用户输入的参数来创建报告。更容易将其建模为:

CustomerReportService.GetOrdersByOrderDate(Customer theCustomer, Date cutoff);

比这样:

myCustomer.OrdersCollection.SelectMatching(Date cutoff);

或者换句话说,您用于数据录入的 DDD 模型不必与您用于报告的 DDD 模型相同

在高度可扩展的系统中,将这两个问题分开是很常见的。

于 2009-11-04T15:42:49.523 回答