【问题标题】:Is it a good practice to use DTO in the service layer? [duplicate]在服务层使用 DTO 是一种好习惯吗? [复制]
【发布时间】:2020-06-04 01:13:29
【问题描述】:

我有一个控制器,可以将 dto 转换为实体并将其传递给服务级别。

@PostMapping(value = "/new", produces = MediaType.APPLICATION_JSON_VALUE)
    public ResponseEntity<UserDto> create(@RequestBody UserDto userDto){           
        User newUser= userService.save(userMapper.userDtoToUser(userDto));            
        return ResponseEntity......body(userMapper.userToUserDto(newUser));
    }

正确的决定是不是将实体转移到服务,而是转移到 dto? 例如:

    public interface UserService{
      UserDto save(UserDto userDto);
}

在控制器级别转换实体和 dto 的决定是否正确?

【问题讨论】:

  • 在服务层转换DTO的最佳实践,不要在控制器中放置任何逻辑。

标签: java spring spring-boot model-view-controller dto


【解决方案1】:

将任何转换逻辑放在控制器中是一种不好的做法。所有转换/填充逻辑都应该放在辅助类中,例如转换器和填充器。以here 为例。

此外,您的服务类应该为 CRUD 操作获取一个实体(而不是 DTO),因为 DTO 可能没有成功完成 CRUD 操作所需的所有值。但是,更好的做法是将所有 CRUD 操作放到一个公共服务中,例如EntityService 并将必须对其执行 CRUD 操作的实体(例如用户)传递给它,例如YourEntityService.save(用户)。以herehere 为例。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-11-15
    • 2011-02-28
    • 2022-10-05
    • 2022-01-23
    • 2020-12-14
    • 1970-01-01
    • 1970-01-01
    • 2019-03-11
    相关资源
    最近更新 更多