Автор оригинала: 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 {
List getAllBooks();
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 List 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 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 , Википедия .