在DDD中搜索聚合

问题描述 投票:0回答:1

我在DDD中有以下场景。

public class Document
{
public int Id {get;set;}
public string DocumentCode {get;set;}
public int BuyerId {get;set;}
}

public class Buyer
{
public int Id {get;set;}
public string Name {get;set;}
}

现在我想搜索包含名为“John”的买家的所有文档。

由于买方是一个不同的聚合,我正在考虑这些情况

创建新聚合

public class DocumentSearch
{
public int Id {get;set;}
public string DocumentCode {get;set;}
public int BuyerId {get;set;}
public string Name {get;set;}
}

这里的“问题”是这个聚合需要监听任何买方变更并在本地应用变更。

保持一切不变。

在db级别创建一个可作为新聚合的视图。这里的问题是它打破了每个DDD原则,应用程序并不是真正的持久性无知

在应用级别搜索和加入

基本上搜索Document,在Buyer上搜索并在应用程序级别加入。我相信这需要更多的时间和力量,因为两组最初都要大于它们实际应该在合并搜索中?

为了遵循DDD原则会有什么方法? CQRS是最终的解决方案,但我正在寻找通往CQRS的瞬态解决方案

architecture domain-driven-design code-first
1个回答
0
投票

问一个问题不应该改变答案。

由于搜索不会更改答案,因此通常不需要域模型或域实体来支持它。

通常的解决方案是(a)直接查询数据模型或(b)创建“读取模型”以支持查询。

(a)正如它在锡上所说的那样。如果要在RDBMS中存储数据,那么只需查询 - > dto? - >回应。

读取模型通常用于查询支持不可行的地方。读取模型实际上是一个缓存的DTO - 您可以在事物发生变化时构建集合的表示。大多数情况下,您会看到异步完成此操作 - 针对“最新”表示运行查询,并运行后台工作流以将更改传播到该表示。

© www.soinside.com 2019 - 2024. All rights reserved.