architecture - DDD-每个实体的存储库还是所有实体的存储库?

标签 architecture domain-driven-design

首先,可能没有正确的答案,但是我敢肯定,有些人比我了解得多,并且能够提供帮助。

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

系统可以有任意数量的用户。

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

博客可以拥有与用户将要发布的帖子一样多的帖子,并且所有帖子都将来自拥有该博客的同一用户(即,如果John拥有Blog Food,则只有John可以在此博客中发布)。当然,每个帖子都有一个父博客。

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

然后,我有一个博客页面,其中显示了博客的详细信息,所有者(用户)的名称以及所有帖子的标题。

然后,我有一个帖子页面,其中显示了帖子详细信息,博客名称和所有者名称。

如您所见,我所有的人之间都有联系,但是他们中的任何一个都不能起到聚集作用。

在代码中定义实体并不难,我确实遇到的问题是定义存储库。我需要多少钱? 3-每个实体一个? 1-为了一切?如何执行查找?

例如,在用户页面上获取5条最新帖子。用户没有对帖子的引用,而是在其中拥有一个Blogs容器,其中每个Blog依次拥有一个Posts容器。我的存储库中是否应该有一个接受UserID并返回帖子列表的方法?也许应该是一项服务?另外,我通常不执行所有数据的加载,而是执行延迟加载。通过检索现有的User实体,除非需要它们(第一次访问时),否则我不会加载其博客。

提前致谢。

最佳答案

我将创建:

  • 一个PostRepository,用于处理帖子和评论
  • BlogRepository主要用于搜索
  • UserRepository

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

    我通常会在使用存储库后对其建模,并避免聚合的嵌套(两个以上级别)。

    For example to get the 5 last posts in the user page. User does not have reference to Posts, instead in holds a container of Blogs where each Blog in turn holds container of Posts.



    恕我直言,用户不应在Blog上放置容器。您具有要获取的存储库。

    Should I have a method in my repository that accepts the UserID and returns a list of Posts?



    是的。

    Or maybe it should be a Service?



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

    Also I don't usually perform loading of all the data but instead I have lazy loading. By retrieving an existing User entity, I would not load its blogs unless they are needed (when first time accessed).



    可以通过不具有将所有域模型链接在一起的属性来避免延迟加载。尝试仅对子聚合具有属性。

    关于architecture - DDD-每个实体的存储库还是所有实体的存储库?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9360668/

    相关文章:

    c# - 使用 msmq 队列对服务进行负载平衡?

    validation - 在域驱动设计中应该将输入验证放在哪里?

    typescript - Nestjs 事件溯源 - 事件持久性

    domain-driven-design - 持久性应该是域对象的责任吗? (你能评论这篇文章吗?)

    c++ - 组织 C++ 套接字服务器的最佳方式是什么?

    c# - C# 中的三层应用程序 - 放置数据和业务模型的位置

    javascript - 如何正确划分不同页面的javascript逻辑?

    go - 用于 GO 应用程序和 mongodb 的干净和通用的项目结构

    php - 域模型 MVC 中的 native 数据库查询

    architecture - 我的身份服务器应该拥有用户配置文件吗?