データベース操作の秘訣、Data access objectとは?

ざっくりと

  • アプリとデータベースをつなぐ
  • 操作を分離し変更を容易に
  • 多くの言語やソフトウェアで利用可

Data access objectとは、アプリとデータベースを繋ぐ技術です。

概要説明

Data access objectとはデータベースとアプリケーションをつなぐための技術だ。 なぜなら、Data access object(DAO)を使えば、アプリケーションのコードを変えずにデータベースの操作ができるからだ。

例えば、データの読み書きや検索などの操作である。そして、データベースの詳細を知らなくても操作ができる。つまり、設計パターンとしての役割を果たす。だから、開発効率を上げるために重要だ。

職業職種

  1. ソフトウェアエンジニア
    ソフトウェアエンジニアは、Data access objectを頻繁に使用する。なぜなら、アプリケーションとデータベースをつなぐための設計パターンとして活用されるからだ。例えば、システム開発時のデータベースの操作である。
  2. データサイエンティスト
    データサイエンティストも、Data access objectを使用することがある。なぜなら、大量のデータを効率良く操作するために必要となるからだ。例えば、データ解析に必要なデータを取得する際に使う。
  3. システムアーキテクト
    システムアーキテクトは、Data access objectの設計を行う。なぜなら、システム全体のデータ操作をスムーズにするための設計を決定する役割があるからだ。例えば、システム設計時に決定するデータベースとの連携方法である。

DAO(Data Access Object)は、データベースとアプリケーションの間の通信を管理します。それに対して、SQLはデータベース内のデータを操作するための言語です。

DAOコード例

import java.sql.*;
import java.util.ArrayList;
import java.util.List;

public class UserDao {
    private Connection conn;

    public UserDao(Connection conn) {
        this.conn = conn;
    }

    public List<User> getAllUsers() {
        List<User> userList = new ArrayList<>();
        try {
            Statement stmt = conn.createStatement();
            ResultSet rs = stmt.executeQuery("SELECT * FROM users");

            while(rs.next()) {
                User user = new User();
                user.setId(rs.getInt("id"));
                user.setName(rs.getString("name"));
                user.setEmail(rs.getString("email"));
                userList.add(user);
            }
        } catch (SQLException e) {
            e.printStackTrace();
        }
        return userList;
    }
}

このUserDaoクラスは、データベースに接続し、ユーザーのリストを取得するgetAllUsersメソッドを持っている。このメソッドはSQLクエリ(”SELECT * FROM users”)を実行し、その結果をJavaのUserオブジェクトのリストに変換する。

このようにDAOを使用すると、データベース操作がJavaコード内で一貫した方法で抽象化され、アプリケーションの他の部分から独立してデータベースとのやり取りを管理できる。これにより、データベースの詳細を公開せずにデータ操作を行うことが可能になる。

類似語

  • DAOパターン
    DAOパターンは、Data access objectの一部とも言える。なぜなら、DAOパターンも特定のデータベースからデータを取得したり操作したりする方法を提供するからだ。例えば、オブジェクト指向プログラミングでよく使われる。
  • ORM
    ORMは、Object Relational Mappingの略で、Data access objectとよく似てる。なぜなら、両方ともアプリケーションとデータベースの間を仲介するからだ。例えば、ORMは特定のデータベーステーブルとクラスをマッピングする。
  • リポジトリパターン
    リポジトリパターンは、Data access objectと似た役割を果たす。なぜなら、両方ともデータアクセスロジックをカプセル化するからだ。例えば、リポジトリパターンは一般的にデータベースとのやり取りを抽象化し、データアクセスを簡単にテストできるようにする。

反対語

  • 直接アクセス
    直接アクセスは、Data access objectの反対と言える。なぜなら、DAOはデータベースの詳細を隠すためのもので、直接アクセスはデータベースの詳細を直接扱うからだ。例えば、特定のSQL文を直接コーディングする行為。
  • ハードコード
    ハードコードは、Data access objectの反対語である。なぜなら、DAOはデータベースへのアクセス方法を抽象化し、ハードコードはデータアクセスを直接プログラム内に埋め込むからだ。例えば、特定のSQL文を直接プログラムに書き込む。
  • 構造化データ
    非構造化データは、Data access objectの反対と言える。なぜなら、DAOは主に構造化データに対する操作を扱い、非構造化データはその構造が定義されていないからだ。例えば、社交メディアの投稿やメールのテキストなど。

会話例

  1. プロジェクトチームのミーティングで
    Q.「新しい機能を追加するためにDAOを更新する必要があるか?」
    A.「そうだね。DAOを更新することで、新しいデータ操作を追加できるよ。」
  2. コードレビューセッション
    Q.「このDAOはどのデータベーススキーマにマッピングされているの?」
    A.「このDAOはユーザーデータベースにマッピングされているよ。」
  3. 新入社員へのトレーニングで
    Q.「DAOの役割は何ですか?」
    A.「DAOの主な役割は、アプリケーションとデータベース間の通信を管理することだよ。」

注意点

DAOを使用する時の注意点はデータの一貫性である。なぜならば、複数のDAOが同じデータにアクセスし、それぞれがデータを変更する可能性があるからだ。

例えば、同時に複数のユーザーが同じレコードを更新しようとするケースである。そして、これが起こると、データの不整合が生じる可能性がある。だから、トランザクション管理を適切に行うことが重要だ。

Data access objectとORMは、間違えやすいので注意しましょう。

Data access objectは、アプリケーションとデータベース間の通信を抽象化します。

一方、ORMはデータベースのテーブルとオブジェクト指向プログラムの、クラスとのマッピングを行います。

記事を書いてる人

ガラケー時代からWEB開発やってる自宅SE です。

「○○を知りたい!!」「○○が分からない!!」などありましたら、Twitterでもブログでもコメントいただければ、ご期待に添えるように頑張ります!

ネット事件簿チャンネルを運営しているので、YouTubeもぜひ覗いてみてください!!

雨おやじのSNSを覗く!!
IT用語辞典
雨おやじのSNSを覗く!!
ITkagyo

コメント