首页 > 解决方案 > Spring boot 中实体使用与 Dto 使用对比

问题描述

通常,当我创建 REST 应用程序时,我会通过以下方式创建它们:

控制器(接收/返回 Dtos)-> 服务(接收和返回 Dtos,并使用 MapStruct 在内部映射从到实体)-> 存储库(始终接收实体)

但我意识到现在我们可以使用 spring 属性:

spring.jpa.open-in-view=false

所以我想知道是否仍然需要在 Spring REST 应用程序中使用 Dto 以及使用它们或避免使用它们的含义是什么?

标签: javaspringspring-mvcspring-boot

解决方案


我认为没有正确的方法。正如你所说,我们需要讨论权衡。

对所有层使用一个模型进行开发,可能会使您的开发速度更快。您不会花时间创建多个 DTO(也避免创建实体模型和 DTO 之间的映射)。但是,您将全部耦合。模型中的微小变化可能会影响所有层,您可能必须处理它。每当您需要调整代码时,可能会花费更多的精力。

另一种方法是为每一层设置 DTO(或专用/特定模型),这可能会增加您的开发时间。在这种情况下,每当请求更改时,对其他层的影响可能很小。我的意思是,降低了在其他层中破坏东西的风险。正如您的问题一样,实体模型的更改不会影响 REST API,因为它只公开了 DTO。

总而言之,主要问题是:您更喜欢“开发速度”还是“层/类之间失去耦合”?

如您所见,这取决于您的需要。


推荐阅读