我有一个简单的 DDD 服务,带有文章聚合根。我使用 MediatR 和 CQRS 来分离命令和查询。在 DDD 域中不应依赖于应用程序和基础设施层。我有一个存储库 IArticleRepository,用于从文章数据库中组合一些数据。我有一个休息端点,用于通过某种过滤器获取文章,以便我创建
ArticleQuery : IRequest<ArticleDto(or Article)>
那么这个查询对象应该是什么时候呢?我每个聚合都有一个存储库,因此在域层中我有 IArticleRepository。我需要指定输入参数类型。如果我将查询放在基础设施或应用程序层中,我会获得从域指向基础设施或应用程序的依赖关系。如果我将查询放在域中,则会违反 DDD,因为查询与业务无关。如果我不将对象放入存储库,而仅将字段作为参数放入存储库,则会有大约 10-15 个参数 - 这是代码味道。
它需要,因为在查询处理程序中也出现了搜索引擎逻辑,所以我决定通过存储库或类似的东西将搜索引擎逻辑中的 SQL 逻辑封装在基础设施中。
我通常会去查询层各种各样的。就像我会有一个ICustomerRepository
处理我的聚合我会有一个ICustomerQuery
直接与我的数据存储交互。
存储库实际上应该仅用于聚合,因此仅用于数据修改。唯一的检索应该是检索整个聚合,以便对该聚合产生某种形式的更改。
查询层(更关心的是layer,真的)是基础设施。我通常也命名空间any读取模型 in a Query
命名空间以区分我的域Customer
,说,还有我的Query.Customer
.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)