因此,经过多次阅读,我现在意识到复杂的报告功能不属于典型的存储库,并且需要某种专用的“Finder”,它返回用于报告的只读对象。
我不清楚的是“Finder”类及其相关的ReadModel类应该放在我的项目中?查找器是否像存储库一样,您在基础架构组件中有查找器的接口以及具体的Readmodel?
这些类属于哪里?
答案 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);
}
你会注意到我使用简单类型,如果可以,技术特定数据访问对象,如DataRow
,DataTable
,永远不会 DataSet
:) - - 虽然DataSet
可以用于复合数据,但有点麻烦。
我尝试将特定的读取模型(DTO)保持在最低限度,但在处理复合数据时可能需要每隔一段时间。