データアクセス層(DAO)は、データベースや外部サービスとのやり取りを行うための層です。この層を適切に実装することで、アプリケーションの他の層からデータ操作の詳細を隠蔽し、疎結合な設計を実現できます。この教材では、Pythonを用いてDAOをシンプルなコードで実装する方法を学びます。
DAOは、データの取得、追加、更新、削除(CRUD操作)を行うためのインターフェースを提供します。この層を使用することで、データの保管方法や操作の実装を変更する場合でも、ビジネスロジック層に影響を与えずに済みます。
以下のサンプルプロジェクトでは、簡単な書籍管理システムを作成します。このシステムでは、書籍の情報をリストに格納し、CRUD操作を行います。SQLiteなどのデータベースは使用せず、シンプルなPythonコードのみで実装しています。
まず、書籍データの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クラスを使用して書籍を操作する方法を示します。
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)
BookDAO
のインスタンスを作成します。create_book
メソッドを使用して書籍を追加します。get_all_books
メソッドで全書籍を取得し、表示します。update_book
メソッドを使用して書籍情報を更新します。delete_book
メソッドを使用して特定の書籍を削除します。DAOパターンを使用することで、データ管理をビジネスロジック層から分離し、アプリケーションの構造を明確に保つことができます。この教材では、PythonのみでDAOを実装し、シンプルな書籍管理システムを通じてCRUD操作を学びました。