36

我有一个负责我的数据访问的存储库层,它由服务层调用。服务层返回被序列化并通过线路发送的 DTO。通常,服务只是访问存储库并返回存储库返回的任何内容。

但要使其正常工作,存储库必须返回该 DTO 的实例。否则,您首先必须将存储库返回的数据层对象映射到服务层中的 DTO 并返回。这似乎很浪费。

最重要的是,如果 DTO 的创建发生在服务层中,以前可能在一个存储库调用和一个数据库查询中完成的事情,现在必须通过服务层中的多个存储库调用来“组合”最终 DTO。当然,除非我在数据和服务层之间创建一个可以包含这样一个组合对象的传输对象。然后必须将其映射到 DTO 。为了纯洁,这似乎是浪费。但是让存储库层返回刚刚存在的对象以通过网络发送也感觉不对。

4

2 回答 2

28

简短的回答:没有。

长答案:存储库负责将持久化数据转回实体(模型),反之亦然。

模型是代表业务实体的业务模型。另一方面,DTO - 虽然看起来像模型 - 关注对象在各种环境之间的转移,本质上是一个瞬态对象。通常映射器负责将模型转换为 DTO。

于 2011-02-21T17:19:36.463 回答
1

因此,即使没有使用,您的存储库也需要对整个实体进行水合?这似乎非常低效。– ajbeaven 2018 年 10 月 29 日 23:25

你不能为不需要水合整个实体的调用添加方法到存储库接口吗?我想这可能会导致接口臃肿,我认为这是反对的主要论据之一。

为了回答这个问题,我同意 No. Repository 实现在持久层中的公认答案。领域层可能需要从持久层检索深层或浅层对象,除了它必须实现的接口之外,它什么都不知道。如果域在只需要黄油时不断地要求一个完整的冰箱,那么接口(或者可能是数据模型)可能需要一些工作。

于 2019-04-12T19:18:49.070 回答