存储库就像域对象的集合。所以它不应该返回DTO或任何不是域对象的东西。
但是,假设您的域模型有20个包含大量数据的字段,而您只想在这里使用2个字段,您必须先获取整行,然后对其进行映射,这是非常低效的。
这取决于情况。如果使用DDD和CQRS进行建模,则应该为命令返回Aggregate,为查询返回ViewModels。您可以在读取和写入中拆分repo,例如,读取用于服务视图,或者RESTAPI,在这种情况下,您将有DTO而不是ViewModels,因此您只返回查询中需要的数据(字段(。
在写入堆栈中,您应该有一个返回的方法,并且返回类型应该是该特定存储库的Aggregate(如果您不想加载所有相关的子集合,请使用惰性加载(
TAggregate GetById(object id)