关于ReadModels和Domain的DDD / CQRS混淆

时间:2013-06-17 04:33:07

标签: domain-driven-design repository-pattern cqrs

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

我不清楚的是“Finder”类及其相关的ReadModel类应该放在我的项目中?查找器是否像存储库一样,您在基础架构组件中有查找器的接口以及具体的Readmodel?

这些类属于哪里?

1 个答案:

答案 0 :(得分:2)

我通常有一个逻辑查询'layer'。逻辑,因为我并不总是需要将它分成自己的程序集(从.Net / C#透视图)。它不应该在您的域中,因为域不应该查询恕我直言。该域涉及聚合,实体,值对象等。它需要的任何其他东西都需要输入域对象。查询位可能会在应用程序服务边缘发挥更多作用。

我最终得到的是我的存储库仅返回所需的完整聚合/实体以及在读取端实现的单独的IQuery接口。通常我会在DataAccess程序集中使用它。例如:

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

你会注意到我使用简单类型,如果可以,技术特定数据访问对象,如DataRowDataTable永远不会 DataSet :) - - 虽然DataSet 可以用于复合数据,但有点麻烦。

我尝试将特定的读取模型(DTO)保持在最低限度,但在处理复合数据时可能需要每隔一段时间。