首頁 >Java >java教程 >軟體開發中的 DTO 和 DAO

軟體開發中的 DTO 和 DAO

Barbara Streisand
Barbara Streisand原創
2025-01-09 22:10:41728瀏覽

DTO & DAO in Software Development

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 對象,並將這些對象傳送到其他層(例如服務或控制器)。

範例流程:

  1. 控制器層:呼叫服務層。

  2. 服務層:與 DAO 互動以取得或保存資料。

  3. 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中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn