domain-driven-design - 关于 ReadModels 和域的 DDD/CQRS 混淆

标签 domain-driven-design repository-pattern cqrs

因此,经过大量阅读后,我现在意识到复杂的报告功能不属于您的典型存储库,需要某种专用的“Finder”返回只读对象以用于报告。

我不清楚“Finder”类及其关联的 ReadModel 类应该放在我的项目中的什么位置?查找器是否像存储库一样,因为您在基础结构组件中有一个查找器接口(interface)以及具体的 Readmodels?

这些类属于哪里?

最佳答案

我通常有一个逻辑查询“层”。合乎逻辑,因为我并不总是需要将它分成自己的程序集(从 .Net/C# 的角度来看)。它不应该在您的域中,因为该域不应该查询恕我直言。域与聚合、实体、值对象等有关。它需要的任何其他东西都需要输入到域对象中。查询位可能在应用程序服务边缘发挥更多作用。

然后我最终得到的是我的存储库仅返回所需的完整聚合/实体和一个在读取端实现的单独的 IQuery 接口(interface)。通常我将它放在 DataAccess 程序集中。例如:

public interface IUserQuery
{
    bool ContainsEMail(string emailAddress);
    int NumberOfAdminisitrators();
    DataRow Profile(Guid id);
    DataTable FriendRequests(Guid id);
    SomeReadModel ForSomethingThatContainsSayAList(DateTime date);
}

您会注意到我尽可能使用简单类型和技术特定的数据访问对象,如 DataRowDataTablenever DataSet :) --- 尽管 DataSet 可能 用于复合数据,但它有点麻烦。

我尝试将特定读取模型 (DTO) 保持在最低限度,但有时在处理复合数据时可能需要它们。

关于domain-driven-design - 关于 ReadModels 和域的 DDD/CQRS 混淆,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17140455/

相关文章:

java - 设计 : When the line between domain objects and service objects isn't clear

java - 领域驱动设计中的 JPA 实体责任

c# - 洋葱架构、工作单元和通用存储库模式

azure - 如何在使用CQRS方法构建的系统中运行周期性任务?

.net-core - 使用 MediatR 链接处理程序

spring-boot - Axon Framework 中两个聚合体之间的通信

validation - DDD 实体验证

java - DDD : Delete on a Repository vs delete on an Entity?

c# - NHibernate:更新与合并方法

asp.net-mvc-3 - ASP.NET MVC 模式