DTO là một design pattern ( Transfer Object/ Data Transfer Object Pattern là một dạng Architectural Design Pattern ) dùng để truyền dữ liệu giữa các layer (client ↔ server, hoặc giữa các service).
👉 Thường là một POJO đơn giản (chỉ có field + getter/setter, không chứa business logic).
Mục đích của DTO
Giảm số lần gọi API / method (gộp nhiều data vào 1 object)
Tránh truyền quá nhiều tham số
Trả về nhiều dữ liệu trong 1 response (Java chỉ return 1 object)
Tăng bảo mật (ẩn field nhạy cảm như password)
Lợi ích chính
Tách biệt logic (SoC): DTO chỉ chứa data
Giảm coupling: không phụ thuộc trực tiếp vào domain/entity
Dễ mở rộng: thêm/bớt field không ảnh hưởng nhiều
Tối ưu performance: gửi/nhận data gọn hơn
Tăng bảo mật: kiểm soát dữ liệu trả về
Theo sơ đồ trên, data trong ứng dụng Spring Boot chia thành 2 loại chính:
Public: nghĩa là để trao đổi, chia sẻ với bên ngoài qua REST API hoặc giao tiếp với các service khác trong microservice. Data lúc này ở dạng DTO.
Private: các data dùng trong nội bộ ứng dụng, bên ngoài không nên biết. Data lúc này nằm trong các Domain model hoặc Entity.