domain-driven-design - DDD 哪个是根聚合根?

标签 domain-driven-design aggregateroot

许多像订单和订单行这样的例子是有道理的,比如:
Order AR 包含 OrderLinesCustomer AR 包含 Orders .

问题是,什么是 AR 包含 Customer ?
我想它可以是“商店”之类的东西。

所以,shop.AddCustomer(customer) ...

但是,如何获得商店?
如果是 AR (实体)它有一个 id,所以 shop.GetById(shopId) .如果我只有一家商店,这如何持久?

我应该有一张 table (商店)吗?Shop是一个内存对象,集合为 Customers ?

最佳答案

你在那里弄错了。 聚合不包含其他聚合! 他们只能通过 ID 引用它们。

聚合是一组密切相关的实体和值对象。聚合在它们周围形成了一个一致性边界。 聚合根是该聚合中可全局寻址的根实体。所以在你的例子中 OrderOrderLines , Order确实可能是AR。
Customer另一方面,只会引用 Orders如果是单独的聚合,则按 ID。

要检索聚合,您通常使用存储库。您可以通过指定聚合的 ID 或一些其他合适的搜索参数来通过存储库加载聚合。

关于domain-driven-design - DDD 哪个是根聚合根?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34423613/

相关文章:

domain-driven-design - DDD 子实体验证

asp.net-mvc - 我的 ASP.NET MVC 应用程序贫血

domain-driven-design - 领域驱动设计 - 如何处理部分聚合根的更新

domain-driven-design - 有界上下文实现和设计

asp.net - 将存储库模式与 Entity Framework (mvc 店面)一起使用

domain-driven-design - 聚合根数据重复和得墨忒耳定律

doctrine-orm - DDD聚合根设计

c# - 具有 MediatR 的 CQRS 和命令的可重用性

entity-framework - 臭名昭著的 Entity Framework ——聚合根问题

java - 如何使用Spring Data Jpa将一个领域实体对象写入多个数据库表?