在後端開發時,會發現DTO非常好用,特別是在資料傳輸時,能夠安全交換資料,避免不必要的資訊暴露或是浪費傳輸量。
DTO全名是Data Transfer Object,能夠選擇傳入傳出的資訊,而不用直接使用Entity實體傳輸。
User實體類別如下,有完整的資料欄位:
public class User {
private Long id;
private String username;
private String password;
private String email;
private String address;
// getters and setters
}
UserDTO如下,過濾掉敏感資訊,如密碼:
public class UserDTO {
private Long id;
private String username;
private String email;
// getters and setters
}
實體類別的日期型別為LocalDateTime:
public class Task {
private Long id;
private LocalDateTime taskDate;
// getters and setters
}
DTO將日期處理為字串,使前端更好處理:
public class TaskDTO {
private Long id;
private String taskDate; // yyyymmdd 格式
// getters and setters
}
實體類別有庫存欄位:
public class Product {
private Long id;
private String name;
private Double price;
private int stock;
}
使用DTO隱藏庫存欄位:
public class ProductDTO {
private Long id;
private String name;
private Double price;
}
DAO(Data Access Object)主要是負責與資料庫交互,單純處理CRUD的操作,屬於抽象化資料存取層,與業務邏輯分層,保持可讀性及維護性,與DTO完全不一樣。
public interface TaskDAO {
Task findById(Long id);
void save(Task task);
DTO專注於資料傳輸,是後端開發中非常重要的設計模式,能夠有效控制資料傳輸,提升安全性,而DAO則是專注於資料存取,與業務邏輯清楚分開,能夠提升維護性。後端開發善用這兩者,能夠大大提升系統維護及擴充性唷!
另外我覺得不可變的 DTO 的物件可以嘗試使用 record
來封裝,基本上會讓程式碼更簡潔
感謝分享,目前還沒接觸過record,我再來使用看看!
沒記錯他是 JAVA 17 後的新類別