DDD外部实体参考

时间:2018-04-09 13:36:02

标签: web-services model architecture entity domain-driven-design

我有一个名为项目的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获得的每个信息,但在这种情况下,我可能会有不一致(如果用户更新其外部服务的数据)

1 个答案:

答案 0 :(得分:1)

我真的会考虑外部存储库是否与内部存储库不同。我知道说它们是同一个东西在思想上似乎更简单,但它们显然不是。 "完成AR"的想法对于您的项目,不应包含可在您的应用程序之外更改的内容。为您的外部回购创建一个单独的AR,我认为您的大多数问题都会消失。