Рубрики
Без рубрики

Шаблон дизайна DAO

DAO, Объект доступа к данным, Шаблон проектирования DAO, Пример Java DAO, реализация шаблона DAO в java, DAO в java, интерфейс DAO, пример кода реализации.

Автор оригинала: Pankaj Kumar.

DAO расшифровывается как Объект доступа к данным. DAO Шаблон проектирования используется для разделения логики сохранения данных на отдельном уровне. Таким образом, служба остается в полном неведении о том, как выполняются низкоуровневые операции для доступа к базе данных. Это известно как принцип Разделения логики .

Шаблон дизайна DAO

С помощью шаблона проектирования DAO у нас есть следующие компоненты, от которых зависит наш дизайн:

  • Модель, которая переносится с одного слоя на другой.
  • Интерфейсы , которые обеспечивают гибкий дизайн.
  • Реализация интерфейса, которая является конкретной реализацией логики сохранения.

Реализация шаблона DAO

С помощью вышеупомянутых компонентов давайте попробуем реализовать шаблон DAO. Здесь мы будем использовать 3 компонента:

  1. Модель Книга , которая переносится с одного слоя на другой.
  2. Интерфейс BookDAO , обеспечивающий гибкий дизайн и API для реализации.
  3. 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. Давайте изложим некоторые из них здесь:

  1. При изменении механизма сохранения, уровень обслуживания даже не должен знать, откуда берутся данные. Например, если вы подумываете о переходе от использования MySQL к MongoDB, все изменения необходимо вносить только на уровне DAO.
  2. Шаблон DAO делает акцент на низкой связи между различными компонентами приложения. Таким образом, уровень представления не зависит от уровня DAO, и от него зависит только уровень обслуживания, даже если это связано с интерфейсами, а не с конкретной реализацией.
  3. Поскольку логика сохранения полностью разделена, гораздо проще писать модульные тесты для отдельных компонентов. Например, если вы используете JUnit и Mockito для тестирования фреймворков, вам будет легко имитировать отдельные компоненты вашего приложения.
  4. Поскольку мы работаем с интерфейсами в шаблоне DAO, он также подчеркивает стиль “работа с интерфейсами вместо реализации”, который является отличным стилем программирования OOPs.

Вывод шаблона DAO

В этой статье мы узнали, как мы можем использовать шаблон проектирования DAO, чтобы подчеркнуть необходимость разделения логики сохранения и, следовательно, слабой связи наших компонентов.

Шаблоны проектирования просто основаны на способе программирования и поэтому не зависят от языка и структуры. Не стесняйтесь оставлять свои мнения в комментариях ниже. Загрузите пример проекта DAO по ссылке ниже.

Ссылки: Документация Oracle , Википедия .