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,我认为您的大部分问题都会消失。
我有一个名为 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,我认为您的大部分问题都会消失。