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