Автор оригинала: Pankaj Kumar.
DAO расшифровывается как Объект доступа к данным. DAO Шаблон проектирования используется для разделения логики сохранения данных на отдельном уровне. Таким образом, служба остается в полном неведении о том, как выполняются низкоуровневые операции для доступа к базе данных. Это известно как принцип Разделения логики .
Шаблон дизайна DAO
С помощью шаблона проектирования DAO у нас есть следующие компоненты, от которых зависит наш дизайн:
- Модель, которая переносится с одного слоя на другой.
- Интерфейсы , которые обеспечивают гибкий дизайн.
- Реализация интерфейса, которая является конкретной реализацией логики сохранения.
Реализация шаблона DAO
С помощью вышеупомянутых компонентов давайте попробуем реализовать шаблон DAO. Здесь мы будем использовать 3 компонента:
- Модель
Книга
, которая переносится с одного слоя на другой. - Интерфейс
BookDAO
, обеспечивающий гибкий дизайн и API для реализации. BookDaoImpl
конкретный класс, который является реализацией интерфейсаBookDAO
.
Давайте изложим эту логику в виде диаграммы:
Класс модели шаблона DAO
Теперь давайте представим наш объект модели.
package com.journaldev.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.journaldev.dao; import com.journaldev.model.Books; import java.util.List; public interface BookDao { ListgetAllBooks(); Books getBookByIsbn(int isbn); void saveBook(Books book); void deleteBook(Books book); }
Реализация шаблона DAO
Далее мы создаем конкретный класс, реализующий вышеуказанный интерфейс.
package com.journaldev.daoimpl; import com.journaldev.dao.BookDao; import com.journaldev.model.Books; import java.util.ArrayList; import java.util.List; public class BookDaoImpl implements BookDao { //list is working as a database private Listbooks; 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 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.journaldev; import com.journaldev.dao.BookDao; import com.journaldev.daoimpl.BookDaoImpl; import com.journaldev.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, он также подчеркивает стиль “работа с интерфейсами вместо реализации”, который является отличным стилем программирования OOPs.
Вывод шаблона DAO
В этой статье мы узнали, как мы можем использовать шаблон проектирования DAO, чтобы подчеркнуть необходимость разделения логики сохранения и, следовательно, слабой связи наших компонентов.
Шаблоны проектирования просто основаны на способе программирования и поэтому не зависят от языка и структуры. Не стесняйтесь оставлять свои мнения в комментариях ниже. Загрузите пример проекта DAO по ссылке ниже.
Ссылки: Документация Oracle , Википедия .