解决DDD关联的性能问题

时间:2014-09-08 08:05:43

标签: performance domain-driven-design

我知道这个问题已经多次得到解决,但我似乎无法找到最符合我情况的答案。

我目前正在努力设计DDD方法中的实体之间的关联,并考虑到性能。我们假设我们有Article实体,Author实体作为属性。同样的Author有一个Mail对象作为属性,在我的设计中是一个值对象(它可以是一个常规属性,但这仅仅是为了示例)。 ArticleAuthor个实体都是AR。

说我想显示给定作者的文章列表。对于每篇文章,我只想在某种标题中显示作者的姓名。在这一点上,我们说我有一个" findByAuthor"在ArticleRepository

中实施的方法

此方法在调用时将返回Article个对象的列表及其各自的Author对象。这就足够了,因为我只需要作者的名字,这是Author实体的一个简单属性。我不需要Mail对象。

在一个简单的应用程序中,稍微考虑性能,这将是完全正常的,但让我们想象一下,我的域位于可通过REST API访问的远程应用程序上。当我只需要这些关联中的一小部分时,传输具有所有各自关联的AR列表似乎是一个巨大的性能杀手。

如何在不考虑延迟加载等变通方法的情况下解决此问题?

1 个答案:

答案 0 :(得分:0)

您可以(并且应该)使用CQRS来解决此类问题。我只想为它创建另一个名为AuthorArticles和存储库的聚合根实体(每个AR需要单独的存储库)。

authorArticles = authorArticlesRepository.getByAuthorId(authorId)

json中的authorArticles看起来像那样:

{
    "authorName": "Foo",
    "articles": [
         {
              "title": "Bar",
              "text": "Lorem ipsum dolor"
         },
         {
              "title": "Xyz",
              "text": "Lorem ipsum dolor"
         }
    ]
}

将文章对象只放入您需要的数据非常重要。如果您不需要此查询模型的文章全局ID,请不要将其放在那里。