存储库就像域对象的集合。因此,它不应返回DTO或非域对象的任何东西。
但是,假设您的域模型有20个包含大量数据的字段,并且您只想在此处使用2个字段,则必须先获取整行然后进行映射,这效率很低。
答案 0 :(得分:3)
这取决于。如果要使用DDD和CQRS进行建模,则应为命令返回聚合,为查询返回ViewModel。您可以在读取和写入中拆分存储库,其中读取用于提供视图(例如REST API),在这种情况下,您将拥有DTO,而没有ViewModel,因此您仅从查询中返回所需的数据(字段)。
在写堆栈中,您应该有一个返回的方法,返回类型应该是该特定存储库的汇总(如果您不想加载所有相关的子集合,请使用延迟加载)
TAggregate GetById(object id)