DDD 外部实体引用

DDD external entity reference

我有一个名为 Project 的 aggregateRoot。

这个项目可以有一个名为 GitRepository 的子实体。此实体表示对外部 git 存储库(如 Github、Bitbucket)的访问。

下面是我的持久化数据的示例(我使用 NoSql DB):

Project {
  id: String
  name: String
  GitRepository: GitRepository {
    externalRepoId: String // e.g. reference to the external github repo ID
    externalToken: String
}

GitRepository 实体包含允许我从此类外部服务检索更多数据的属性(例如存储库名称或协作者)。

当我有外部引用时,我不明白的是聚合根应该如何存储(我想我应该存储 Github 的外部 ID 引用)。但是我如何创建我的完整 AR 来填充数据(合作者、存储库名称……)。

这是从外部服务获取数据后我的聚合根的外观示例。

Project {
  id: String
  name: String
  gitRepository {
    externalRepoId: String
    externalToken: String
    repoName: String
    collaborators: List []
    repoCreatedAt: Date
    ...
  }
}

在那种情况下,我的数据库中会有一个不同于域模型的模型化。有效吗?

PS:另一种选择是复制数据并存储我可以从 Github 获得的所有信息,但在那种情况下我可能会出现不一致(如果用户在外部更新其数据服务)

我真的会考虑外部存储库是否与内部存储库是不同的聚合根。我知道说它们是同一件事在意识形态上似乎更简单,但它们显然不是。 "Complete AR" 项目的想法不应该包括可以在应用程序之外更改的内容。为您的外部回购创建一个单独的 AR,我认为您的大部分问题都会消失。