我们正在使用Spring Boot创建rest api。我们的项目中有三层(存储库,服务和控制器)。
假设我的控制器中有GetUser api返回UserDTO对象。
@GetMapping
public UserDTO getUser() {
return userService.getUser();
}
userService.getUser()
是否返回UserDTO对象,或者它返回User对象并在控制器中转换为UserDTO对象?哪一个更好?
很快,域对象要进行DTO对象转换,应该在服务层还是控制器层完成?
答案 0 :(得分:2)
我认为没有更好的方法"将域对象转换为DTO对象时,这是一个品味问题。在我的项目中,我将域对象转换为服务层中的DTO,作为我的"业务逻辑"的一部分。因此,您只能将域对象的可访问性降低到服务层。此外,我想减少"逻辑"在我的控制器内部,因为它们是应用程序层的一部分。
PS:如果您正在寻找几种将域对象转换为DTO的方法,请查看我最近的Stackoverflow问题之一(How to properly convert domain entities to DTOs while considering scalability & testability)
答案 1 :(得分:2)
这取决于应用程序需求和体系结构。想法是使dto转换处于边缘。通常最好在控制器级别进行dto和域转换。如果要使服务/业务逻辑独立于使用者,则最好在api级别使用。如果您的服务已被多个消费者使用,这将变得更加清楚。