<一覧に戻る

データアクセス層(DAO)の実装

データアクセス層(DAO)は、データベースや外部サービスとのやり取りを行うための層です。この層を適切に実装することで、アプリケーションの他の層からデータ操作の詳細を隠蔽し、疎結合な設計を実現できます。この教材では、Pythonを用いてDAOをシンプルなコードで実装する方法を学びます。

DAOの基本概念

DAOは、データの取得、追加、更新、削除(CRUD操作)を行うためのインターフェースを提供します。この層を使用することで、データの保管方法や操作の実装を変更する場合でも、ビジネスロジック層に影響を与えずに済みます。

サンプルプロジェクトの概要

以下のサンプルプロジェクトでは、簡単な書籍管理システムを作成します。このシステムでは、書籍の情報をリストに格納し、CRUD操作を行います。SQLiteなどのデータベースは使用せず、シンプルなPythonコードのみで実装しています。

データ管理クラス(DAO)の実装

まず、書籍データのCRUD操作を行うDAOクラスを作成します。

# 書籍のデータ管理クラス(データベース代わりにリストを使用)
class BookDAO:
    def __init__(self):
        # 書籍データを格納するためのリスト(データベースの代替)
        self.books = []
        self.current_id = 1  # IDの自動採番

    def create_book(self, title, author, published_date):
        # 新しい書籍データを作成し、リストに追加
        book = {
            'id': self.current_id,
            'title': title,
            'author': author,
            'published_date': published_date
        }
        self.books.append(book)
        self.current_id += 1

    def get_all_books(self):
        # 全ての書籍を返す
        return self.books

    def get_book_by_id(self, book_id):
        # 指定したIDの書籍を検索して返す
        for book in self.books:
            if book['id'] == book_id:
                return book
        return None  # 該当するIDがない場合

    def update_book(self, book_id, title, author, published_date):
        # 指定したIDの書籍を更新
        for book in self.books:
            if book['id'] == book_id:
                book['title'] = title
                book['author'] = author
                book['published_date'] = published_date
                return True  # 更新成功
        return False  # 該当するIDがない場合

    def delete_book(self, book_id):
        # 指定したIDの書籍を削除
        for i, book in enumerate(self.books):
            if book['id'] == book_id:
                del self.books[i]
                return True  # 削除成功
        return False  # 該当するIDがない場合

コード解説

  • BookDAOクラス:書籍情報をリストで管理し、CRUD操作を提供します。
  • __init__メソッド:書籍データを格納するリストと、IDの自動採番用の変数を初期化します。
  • create_bookメソッド:新しい書籍をリストに追加します。
  • get_all_booksメソッド:すべての書籍を取得します。
  • get_book_by_idメソッド:指定したIDの書籍を取得します。
  • update_bookメソッド:指定したIDの書籍情報を更新します。
  • delete_bookメソッド:指定したIDの書籍を削除します。

DAOの使用例

次に、DAOクラスを使用して書籍を操作する方法を示します。

if __name__ == '__main__':
    dao = BookDAO()

    # 書籍の追加
    dao.create_book('Python Programming', 'John Doe', '2023-01-01')
    dao.create_book('Data Science Essentials', 'Jane Smith', '2022-06-15')

    # 書籍の取得
    books = dao.get_all_books()
    print("All Books:")
    for book in books:
        print(book)

    # 書籍の更新
    dao.update_book(1, 'Advanced Python Programming', 'John Doe', '2023-01-15')

    # 更新後の書籍を取得
    updated_book = dao.get_book_by_id(1)
    print("\nUpdated Book:")
    print(updated_book)

    # 書籍の削除
    dao.delete_book(2)

    # 削除後の書籍リストを表示
    print("\nBooks after deletion:")
    remaining_books = dao.get_all_books()
    for book in remaining_books:
        print(book)

コード解説

  • DAOのインスタンス作成BookDAOのインスタンスを作成します。
  • 書籍の追加create_bookメソッドを使用して書籍を追加します。
  • 書籍の取得get_all_booksメソッドで全書籍を取得し、表示します。
  • 書籍の更新update_bookメソッドを使用して書籍情報を更新します。
  • 書籍の削除delete_bookメソッドを使用して特定の書籍を削除します。

まとめ

DAOパターンを使用することで、データ管理をビジネスロジック層から分離し、アプリケーションの構造を明確に保つことができます。この教材では、PythonのみでDAOを実装し、シンプルな書籍管理システムを通じてCRUD操作を学びました。

出力結果: