我有一个名为项目的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获得的每个信息,但在这种情况下,我可能会有不一致(如果用户更新其外部服务的数据)
答案 0 :(得分:1)
我真的会考虑外部存储库是否与内部存储库不同。我知道说它们是同一个东西在思想上似乎更简单,但它们显然不是。 "完成AR"的想法对于您的项目,不应包含可在您的应用程序之外更改的内容。为您的外部回购创建一个单独的AR,我认为您的大多数问题都会消失。