我在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;}
}
此处的“问题”是,该汇总需要听取买方的任何更改并在本地应用更改。
保持一切正常。
然后在数据库级别上创建一个视图,该视图将用作新的聚合。这里的问题是,它违反了所有DDD原则,并且该应用程序并不是真正的持久性不了解
进行搜索并加入应用级别
基本上对文档进行搜索,对买方进行搜索,然后在应用程序级别加入它。我相信这将需要更多的时间和精力,因为这两个集合最初会更大,然后实际上应该在合并搜索中?
遵循DDD原则应该走什么路? CQRS是最终的解决方案,但我正在寻求通往CQRS的过渡解决方案
答案 0 :(得分:0)
提出问题不应改变答案。
由于搜索不会改变答案,因此通常不需要域模型或域实体来支持它。
通常的解决方案是(a)直接查询数据模型或(b)创建“读取模型”以支持查询。
(a)恰好是锡上所说的。如果要将数据存储在RDBMS中,则只需查询-> dto? ->回应。
在查询支持不可行的地方经常使用读取模型。读取模型实际上是缓存的DTO-您可以在事情发生变化时构建集合的表示形式。通常,您会看到这是异步完成的-针对“最新”表示形式运行查询,并运行后台工作流以将更改传播到该表示形式。