【发布时间】:2020-03-29 17:54:54
【问题描述】:
我已经熟悉DDD 并试图了解Entities 和Aggregate Roots 的交互方式。
以下是情况示例:
假设有一个用户,他/她有多个电子邮件地址(例如,最多可以有 200 个)。每个电子邮件地址都有自己的身份,用户也是如此。并且用户和他们的电子邮件之间存在one to many 关系。
从上面的例子中,我认为Users 和Emails 是两个实体,而Users 是aggregate root
我遇到的 DDD 规则:
-
规则:只有
aggregate root可以访问存储库。
问题1:这是否意味着我不能有一个单独的数据库表/集合来单独存储电子邮件?这意味着电子邮件必须嵌入到用户文档中。
-
规则:
aggregate外的Entities只能通过aggregate root访问aggregate内的其他entities。
问题 2: 现在考虑我确实将它们分成两个不同的表/集合,并通过在电子邮件中有一个名为 associatedUserId 的字段来链接电子邮件,该字段包含对电子邮件所属用户的引用到。我不能直接拥有像/users/{userId}/emails 这样的API 端点并直接在EmailService.getEmailsByUserId(String userId) 中处理它吗?如果不是,我该如何建模?
如果这个问题看起来有点幼稚,我很抱歉,但我似乎无法弄清楚。
【问题讨论】:
标签: domain-driven-design ddd-repositories ddd-service