【问题标题】:Getting list of heavy aggregates获取重聚合列表
【发布时间】:2013-05-16 12:38:12
【问题描述】:

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

Repository 包含方法 GetAll,它返回 Orders 的列表。

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

  • GET /orders获取房源
  • GET /orders/{Id} 得到混凝土 Order

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

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

我们如何解决这个困难?

【问题讨论】:

标签: rest repository domain-driven-design repository-pattern ddd-repositories


【解决方案1】:

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

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

【讨论】:

  • 延迟加载的问题是我使用了 Order-OrderItems 来简化 :-) 实际上,该聚合中有很多事件驱动的逻辑,用于检查整个层次结构。感谢您的链接,我一定会尝试阅读您的建议。
猜你喜欢
  • 2012-03-10
  • 1970-01-01
  • 2020-06-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-03-13
  • 1970-01-01
相关资源
最近更新 更多