Sul*_*kan 10 layer dto spring-restcontroller
我们正在使用Spring Boot创建rest api。我们的项目分为三层(存储库,服务和控制器)。
可以说我的控制器中有GetUser api,它返回UserDTO对象。
@GetMapping
public UserDTO getUser() {
return userService.getUser();
}
Run Code Online (Sandbox Code Playgroud)
是userService.getUser()返回UserDTO对象还是返回User对象并将其转换为UserDTO控制器中的对象?哪个更好的方法?
不久,域对象到DTO对象的转换应该在服务层还是控制器层进行?
我认为没有“更好的方法”可以将域对象转换为 DTO 对象,这是一个品味问题。在我的项目中,我将域对象转换为服务层中的 DTO,作为我的“业务逻辑”的一部分。因此,您只能将域对象的可访问性降低到您的服务层。此外,我想减少控制器内部的“逻辑”,因为它们是应用程序层的一部分。
PS:如果您正在寻找几种将域对象转换为 DTO 的方法,请查看我最新的 Stackoverflow 问题之一(如何在考虑可扩展性和可测试性的同时将域实体正确转换为 DTO)
这取决于应用程序需求和架构。想法是将 dto 转换保持在边缘。通常更喜欢在控制器级别进行 dto 和域转换。如果您想让服务/业务逻辑独立于消费者,那么最好在 api 级别拥有。如果您的服务被多个消费者使用,这一点就会变得更加清楚。
小智 6
根据我的经验,转换应该在控制器层。这提供了一个优点,即能够以返回对象为基础重用其他服务方法。
有时这一点可能很重要,因为 DTO 对象通常会减少原始对象的字段。因此,我们需要更多的代码来获取这些减少的字段,从而使我们的代码变得丑陋且重复。
我知道这会将逻辑转移到控制器层,但这是一个权衡。
| 归档时间: |
|
| 查看次数: |
4262 次 |
| 最近记录: |