DTO 命名规范指南
在项目实践中,将查询对象和返回对象都使用 DTO
后缀是可以的,但通常有更清晰的命名规范,帮助区分两者的作用。
🚨 推荐的命名规范
- 请求数据(查询参数、请求体等) → 使用
Request
/Query
后缀 - 返回数据(响应体、结果对象等) → 使用
DTO
/Response
后缀
🟢 示例
查询对象(Request/Query)
UserQuery
/UserRequest
OrderSearchRequest
ProductFilterDTO
(少数场景下也可用DTO
)
返回对象(DTO/Response)
UserDTO
/UserResponse
OrderDetailDTO
ProductInfoDTO
🔎 示例代码
UserQuery
(查询参数)
public class UserQuery {
private String username;
private String email;
private Integer age;
// getters and setters
}
UserDTO
(返回对象)
public class UserDTO {
private String username;
private String email;
private String roleName;
public UserDTO(String username, String email, String roleName) {
this.username = username;
this.email = email;
this.roleName = roleName;
}
// getters and setters
}
Controller 示例
@RestController
@RequestMapping("/api/users")
public class UserController {
@GetMapping("/search")
public ResponseEntity<List<UserDTO>> searchUsers(UserQuery query) {
List<UserDTO> users = userService.findUsers(query);
return ResponseEntity.ok(users);
}
}
⚙️ 为什么区分更好?
✅ 可读性更强:UserQuery
明确表示它是请求数据,UserDTO
表示它是响应数据。
✅ 维护性更好:在项目规模变大时,区分两者有助于快速定位和理解代码。
✅ 更符合开发习惯:例如 Spring Boot
、MyBatis-Plus
、Swagger
等主流框架多推荐这种规范。
🧑💻 统一使用 DTO
后缀的变通方式
- 查询对象 ➔
UserQueryDTO
- 返回对象 ➔
UserResultDTO
/UserDetailDTO
🚀 最佳实践是采用更具语义化的命名方式,如
Request
/DTO
/Response
,让代码更易读、易维护。