2

假设我们的域中有这样一个聚合,它存储在三层深的表层次结构中。让我们将域对象表示为Order- OrderItems- ItemAttributes。我们还假设我们在数据层上使用存储库模式。

存储库包含GetAll返回列表的方法Orders

我们在服务层上遵循 REST,因此,我们使用

  • GET /orders获取列表
  • GET /orders/{Id}得到混凝土Order

该列表仅包含每个的基本字段,Order没有详细信息,但是,通过 id 查询返回更大的对象。

由于实现一个Order是昂贵的操作,我们不喜欢我们获得完整聚合只是为了向客户端发送几个字段的事实。另一方面,我们尝试遵循存储库必须仅返回完全初始化的聚合的合理规则。

我们如何解决这个困难?

4

1 回答 1

2

除了其他人建议的 CQRS 之外,简单的延迟加载是否可以很好地解决这个问题?如果未访问订单项目,则不会加载它们。或者如果您不能使用延迟加载,则使用专用的 OrderSummary/OrderStatus 域对象?

此外,重新考虑是否真的需要重集料总是值得的。可能根本没有需要它的域规则。例如,生命周期是一个众所周知的“错误原因”,因为聚合很重(如 Group->User 或 Product->BacklogItem)。强烈推荐阅读这个主题:聚合设计

于 2013-05-16T23:42:45.577 回答