在一个普通的 DDD 项目中,我希望从存储库中检索到的实体作为 DTO 从域层发送到应用层。
似乎 CQRS 存在的一个原因是应用层所需的查询(主要是读取操作)与领域层所需的查询不同。所以看起来即使是同一对象的查询结果也可能在层之间有所不同。
在我的域层中,我已经将查询结果映射到域实体中。我对一些 CQRS 示例将查询结果直接映射到跳过其匹配实体的 DTO 感到困惑。
假设数据库返回:
{"person": {
"id:": 5323423,
"name": "John",
"family_name": "Smith"
...
}}
然而,实体布局将姓氏映射为姓氏:
class Person
{
Identity id;
String name;
String surname;
}
如果在我见过的一些 CQRS 示例中发生这种情况,则提取的 DTO 看起来会有所不同,从而在将实体与其 DTO 匹配时导致冲突。这些冲突是如何解决的?在我看来,任何 DTO(与实体相关)都应始终从其实体生成。但是,在这种情况下,在应用层中执行不同类型查询的自由度就会丢失。