DTO(資料傳輸物件)和 DAO(資料存取物件)是軟體開發中經常使用的關鍵設計模式,特別是在基於 Java 的應用程式中。以下是每項的解釋以及它們之間的關係:
DTO(資料傳輸物件):
用途:DTO 是一個簡單的對象,旨在在應用程式中的層或進程之間傳輸資料。
用例:它通常用於以最小化方法調用數量(透過捆綁相關數據)的方式封裝數據,並確保其中沒有不必要的業務邏輯。
特點:
包含儲存資料的欄位。
除了 getter 和 setter 之外沒有商業邏輯或方法。
可以序列化以進行網路通訊或 API 回應。
DTO 範例:
公有類別 UserDTO {
私有字串使用者名稱;
私人字符串電子郵件;
// Constructor public UserDTO(String username, String email) { this.username = username; this.email = email; } // Getters and setters public String getUsername() { return username; } public void setUsername(String username) { this.username = username; } public String getEmail() { return email; } public void setEmail(String email) { this.email = email; }
}
DAO(資料存取物件):
用途:DAO負責與資料庫互動。它提供了對資料來源執行 CRUD(建立、讀取、更新、刪除)操作的方法,抽象化了持久化邏輯。
使用案例:它將資料庫操作與業務邏輯分離,遵循單一職責原則。
特點:
封裝 SQL 查詢或 ORM(如 Hibernate、JPA)邏輯。
與資料庫層的介面。
提供可重複使用的方法,如save()、findById()、delete()等
DAO 範例:
導入java.sql.Connection;
導入 java.sql.PreparedStatement;
導入 java.sql.ResultSet;
公共類別 UserDAO {
private Connection 連線;
public UserDAO(Connection connection) { this.connection = connection; } public UserDTO getUserById(int id) throws Exception { String query = "SELECT username, email FROM users WHERE id = ?"; PreparedStatement statement = connection.prepareStatement(query); statement.setInt(1, id); ResultSet resultSet = statement.executeQuery(); if (resultSet.next()) { String username = resultSet.getString("username"); String email = resultSet.getString("email"); return new UserDTO(username, email); } return null; } public void saveUser(UserDTO user) throws Exception { String query = "INSERT INTO users (username, email) VALUES (?, ?)"; PreparedStatement statement = connection.prepareStatement(query); statement.setString(1, user.getUsername()); statement.setString(2, user.getEmail()); statement.executeUpdate(); }
}
整合:
在應用程式中,DAO 從資料庫檢索數據,將其轉換為 DTO 對象,並將這些對象傳送到其他層(例如服務或控制器)。
範例流程:
控制器層:呼叫服務層。
服務層:與 DAO 互動以取得或保存資料。
DAO 層:取得數據,將其轉換為 DTO,然後返回。
程式碼範例:
// 控制器
公用 UserDTO getUserDetails(int id) {
return userService.getUserById(id);
}
// 服務
公用 UserDTO getUserById(int id) {
return userDAO.getUserById(id);
}
好處:
DTO:最佳化資料傳輸並將 UI 或外部 API 回應與內部實體解耦。
DAO:集中資料庫存取邏輯,使其可重複使用和可測試。
如果您需要更深入的解釋或範例,請告訴我!
以上是軟體開發中的 DTO 和 DAO的詳細內容。更多資訊請關注PHP中文網其他相關文章!