ホームページ >Java >&#&チュートリアル >ソフトウェア開発における DTO と DAO
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 オブジェクトに変換し、それらを他のレイヤー (サービスやコントローラーなど) に送信します。
フローの例:
コントローラー層: サービス層を呼び出します。
サービス層: DAO と対話してデータを取得または保存します。
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 サイトの他の関連記事を参照してください。