ホームページ >Java >&#&チュートリアル >ソフトウェア開発における DTO と DAO

ソフトウェア開発における DTO と DAO

Barbara Streisand
Barbara Streisandオリジナル
2025-01-09 22:10:41789ブラウズ

DTO & DAO in Software Development

DTO (データ転送オブジェクト) と DAO (データ アクセス オブジェクト) は、ソフトウェア開発、特に Java ベースのアプリケーションでよく使用される主要な設計パターンです。それぞれの説明とそれらの関係については次のとおりです。


DTO (データ転送オブジェクト):

目的: DTO は、アプリケーション内のレイヤー間またはプロセス間でデータを転送するために設計された単純なオブジェクトです。

使用例: (関連データをバンドルすることで) メソッド呼び出しの数を最小限に抑え、不必要なビジネス ロジックが内部に存在しないようにする方法でデータをカプセル化するためによく使用されます。

特徴:

データを保存するフィールドが含まれます。

ゲッターとセッター以外のビジネス ロジックやメソッドはありません。

ネットワーク通信または 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 の例:

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;

パブリック クラス UserDAO {
プライベート接続接続;

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 に変換して返します。

コード例:

// コントローラー
public UserDTO getUserDetails(int id) {
return userService.getUserById(id);
}

// サービス
public UserDTO getUserById(int id) {
return userDAO.getUserById(id);
}


利点:

DTO: データ転送を最適化し、UI または外部 API 応答を内部エンティティから分離します。

DAO: データベース アクセス ロジックを一元化し、再利用可能でテスト可能にします。

さらに詳しい説明や例が必要な場合は、お知らせください。

以上がソフトウェア開発における DTO と DAOの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。