DAOデザインパターン
DAOはデータアクセスオブジェクトの略です。DAOデザインパターンは、データ永続化ロジックを別のレイヤーに分離するために使用されます。これにより、サービスはデータベースへの低レベルなアクセス操作がどのように行われているかについて完全に無知のままにすることができます。これが、ロジックの分離の原則として知られています。
DAOデザインパターン
DAOデザインパターンにより、当社の設計には次のようなコンポーネントがあります。
- The model which is transferred from one layer to the other.
- The interfaces which provides a flexible design.
- The interface implementation which is a concrete implementation of the persistence logic.
DAOパターンを実装する
上記のコンポーネントを使用して、DAOパターンを実装してみましょう。ここでは、3つのコンポーネントを使用します。
-
- 階層間で移されるBookモデル。
-
- 柔軟な設計とAPIを提供するBookDaoインターフェース。
- BookDaoImpl具象クラスは、BookDaoインターフェースの実装です。
DAOパターンモデルのクラス
さあ、モデルオブジェクトを立てましょう。
package com.scdev.model;
public class Books {
private int isbn;
private String bookName;
public Books() {
}
public Books(int isbn, String bookName) {
this.isbn = isbn;
this.bookName = bookName;
}
// getter setter methods
}
シンプルなオブジェクトで、要素はわずか2つだけで、事をシンプルに保つためです。
DAOパターンのインターフェース
永続化レベルで関連付けられたデータにアクセスするためのインターフェースを定義しましょう。
package com.scdev.dao;
import com.scdev.model.Books;
import java.util.List;
public interface BookDao {
List<Books> getAllBooks();
Books getBookByIsbn(int isbn);
void saveBook(Books book);
void deleteBook(Books book);
}
DAOパターンの実装
次に、上記のインターフェースを実装した具体的なクラスを作成します。
package com.scdev.daoimpl;
import com.scdev.dao.BookDao;
import com.scdev.model.Books;
import java.util.ArrayList;
import java.util.List;
public class BookDaoImpl implements BookDao {
//list is working as a database
private List<Books> books;
public BookDaoImpl() {
books = new ArrayList<>();
books.add(new Books(1, "Java"));
books.add(new Books(2, "Python"));
books.add(new Books(3, "Android"));
}
@Override
public List<Books> getAllBooks() {
return books;
}
@Override
public Books getBookByIsbn(int isbn) {
return books.get(isbn);
}
@Override
public void saveBook(Books book) {
books.add(book);
}
@Override
public void deleteBook(Books book) {
books.remove(book);
}
}
DAOパターンを使用する
最終的に、私たちはこの実装をmain()メソッドで使用します。
package com.scdev;
import com.scdev.dao.BookDao;
import com.scdev.daoimpl.BookDaoImpl;
import com.scdev.model.Books;
public class AccessBook {
public static void main(String[] args) {
BookDao bookDao = new BookDaoImpl();
for (Books book : bookDao.getAllBooks()) {
System.out.println("Book ISBN : " + book.getIsbn());
}
//update student
Books book = bookDao.getAllBooks().get(1);
book.setBookName("Algorithms");
bookDao.saveBook(book);
}
}
DAOパターンの利点
DAOパターンを使用すると、多くの利点があります。ここではいくつかを挙げましょう。
-
- 永続性のメカニズムを変更する場合、サービス層はデータの出所を知る必要はありません。例えば、MySQLからMongoDBに切り替えることを考えている場合、変更はDAO層のみで行う必要があります。
-
- DAOパターンは、アプリケーションの異なるコンポーネント間の低い結合を強調しています。したがって、ビュー層はDAO層に依存せず、サービス層のみが依存し、それも具体的な実装ではなくインターフェースから依存します。
-
- 永続性のロジックが完全に分離されているため、個々のコンポーネントに対してユニットテストを書くことが容易です。例えば、JUnitとMockitoを使用する場合、アプリケーションの個々のコンポーネントをモックすることが簡単です。
- DAOパターンではインターフェースを使用するため、「実装ではなくインターフェースと一緒に作業する」というスタイルを強調しており、これは優れたオブジェクト指向プログラミングのスタイルです。
DAOパターンの結論
この記事では、DAOデザインパターンの使用方法を学びました。このパターンを使うことで、永続性のロジックを分離し、コンポーネントの緩いカップリングを強調することができます。デザインパターンはプログラミングの方法に基づいており、言語やフレームワークに依存しません。コメント欄に意見を自由に書き込んでください。以下のリンクからDAOの実例プロジェクトをダウンロードしてください。
「DAOパターンのサンプルプロジェクトをダウンロードしてください。」
参考文献:オラクルのドキュメンテーション、ウィキペディア。