Поиск по сайту:

Шаблон проектирования DAO


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

Шаблон проектирования DAO

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

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

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

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

  1. Модель Book, которая переносится с одного слоя на другой.
  2. Интерфейс BookDao с гибким дизайном и API для реализации.
  3. Конкретный класс
  4. 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
}

Это простой объект всего с двумя свойствами, чтобы все было просто.

Интерфейс шаблона DAO

Давайте определим интерфейс для доступа к связанным с ним данным на уровне сохраняемости.

package com.journaldev.dao;

import com.journaldev.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.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> 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.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 акцентирует внимание на низкой связи между различными компонентами приложения. Таким образом, уровень View не зависит от уровня DAO, а от него зависит только уровень Service, пусть и с интерфейсами, а не с конкретной реализацией.
  3. Поскольку логика сохраняемости полностью отделена, гораздо проще писать модульные тесты для отдельных компонентов. Например, если вы используете JUnit и Mockito для тестирования фреймворков, вам будет легко смоделировать отдельные компоненты вашего приложения.
  4. Поскольку мы работаем с интерфейсами в шаблоне DAO, это также подчеркивает стиль «работы с интерфейсами вместо реализации», который является отличным стилем программирования ООП.

Заключение шаблона DAO

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

Скачать пример проекта шаблона DAO

Ссылки: Википедия.