我知道这个问题已经多次得到解决,但我似乎无法找到最符合我情况的答案。
我目前正在努力设计DDD方法中的实体之间的关联,并考虑到性能。我们假设我们有Article
实体,Author
实体作为属性。同样的Author
有一个Mail
对象作为属性,在我的设计中是一个值对象(它可以是一个常规属性,但这仅仅是为了示例)。 Article
和Author
个实体都是AR。
说我想显示给定作者的文章列表。对于每篇文章,我只想在某种标题中显示作者的姓名。在这一点上,我们说我有一个" findByAuthor"在ArticleRepository
。
此方法在调用时将返回Article
个对象的列表及其各自的Author
对象。这就足够了,因为我只需要作者的名字,这是Author
实体的一个简单属性。我不需要Mail
对象。
在一个简单的应用程序中,稍微考虑性能,这将是完全正常的,但让我们想象一下,我的域位于可通过REST API访问的远程应用程序上。当我只需要这些关联中的一小部分时,传输具有所有各自关联的AR列表似乎是一个巨大的性能杀手。
如何在不考虑延迟加载等变通方法的情况下解决此问题?
答案 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,请不要将其放在那里。