DDD - 每个实体的存储库还是一个存储库?

Dmi*_*sev 7 architecture domain-driven-design

首先,可能没有正确答案,但我确信有些人比我更了解并且能够提供帮助.

我有3个实体:用户,博客,帖子.

系统可以包含任意数量的用户.

用户可以拥有任意数量的博客,但每个博客只有一个用户.

博客可以拥有与用户发布的帖子一样多的帖子,所有帖子都来自拥有博客的同一用户(即如果John拥有博客Food,只有John可以在此博客中发帖).当然,每个帖子都有一个父级博客.

然后我有用户个人资料页面,我想显示所有用户详细信息,他所有博客的名称,以及最近5个帖子.

我有一个博客页面,显示博客的详细信息,所有者的名称(用户)和所有帖子的标题.

然后我有帖子页面,显示帖子详细信息,博客名称和所有者名称.

如你所见,我在所有人之间都有关系,但他们都不能作为聚合.

在代码中定义实体并不困难,我所遇到的问题是定义存储库.我需要多少钱?3 - 每个实体一个?1 - 什么都有?我该如何进行查找?

例如,获取用户页面中的最后5个帖子.用户没有引用帖子,而是拥有一个博客容器,其中每个博客依次拥有帖子的容器.我的存储库中是否应该接受UserID并返回帖子列表?或者也许应该是服务?此外,我通常不会执行所有数据的加载,而是我有延迟加载.通过检索现有的用户实体,我不会加载其博客,除非需要它们(首次访问时).

提前致谢.

jga*_*fin 5

我会创造:

  • 用于处理帖子和评论的 PostRepository
  • BlogRepository 主要用于搜索
  • 用户库

如果您不打算支持评论,我将删除帖子存储库并处理帖子中的帖子 BlogRepository

我通常在使用后对存储库进行建模,以避免聚合嵌套(超过两个级别)。

例如获取用户页面中的最后 5 个帖子。用户没有对帖子的引用,而是持有一个博客容器,其中每个博客又持有帖子容器。

恕我直言,用户不应该有一个容器到Blog. 你有存储库来获取它。

我的存储库中是否应该有一个接受 UserID 并返回帖子列表的方法?

是的。

或者它应该是一个服务?

服务用于从使用域模型的代码中删除业务逻辑。在获得那种逻辑之前不要创建它们。

此外,我通常不会加载所有数据,而是进行延迟加载。通过检索现有的 User 实体,除非需要(第一次访问时),否则我不会加载它的博客。

通过没有将所有域模型链接在一起的属性,可以避免延迟加载。尝试只拥有子聚合的属性。

  • 因为当您的应用程序增长时,`User` 对象将具有 50 个不同的引用属性,因为用户与系统中的所有内容都有关系。`Blog` 依赖于它的帖子(空的博客毫无价值),但用户不依赖于它的博客。 (2认同)