DDD,Aggregates和Repos

时间:2014-10-16 06:07:59

标签: domain-driven-design ddd-repositories

我有以下实体(示例):

  • Book
  • Author

Book实体也是一个聚合,因为它与一个或多个Author相关联。现在我遇到了如何从repo中获取此聚合的问题。我有以下情况 - 我也需要照顾性能:

  1. 列出所有Book个。无需提取Author s。
  2. 列出BooksAuthor个名称。显然,我们需要获取Book s和相关Author s的汇总。
  3. 列出所有Book个作者 count 。与(2)类似,除了我不想从回购中获取Author,只是计数。
  4. 那么我的存储库应该如何?具体问题:

    • 我们应该使用findBooksfindBooksWithAuthors以及findBooksWithAuthorsCount等方法吗?但这会导致大量的方法,因为我们的实体之间有很多关系。
    • 我们应该在findBooks中拥有loadAuthors然后AuthorsRepo,即不进行加入,直到遇到某些性能问题,然后进行重构。
    • 我应该创建一些聚合值对象,例如:描述关系的BookAndAuthors吗?

    请注意,这个例子很简单 - 您必须知道我们的模型更丰富,关系更多。

1 个答案:

答案 0 :(得分:0)

您是否需要获取此类信息才能在UI上显示?

我建议您将您的读写问题分开,并保持您的存储库界面简单(类似于集合界面)。

看看CQRS,它与DDD配合得非常好,有助于简化您的设计。

进入CQRS后,请记住,CQRS 不一定涉及事件采购

在你的情况下,我会推荐this article中最简单的方法show,基本上有一个读取服务(可以称之为Finder),它会触发SQL并为你提供你需要的任何UI的DTO / Map。