🗄 Борьба за Доступ к Данным: Data Access Object (DAO) vs. Repository
Совсем недавно проходил квиз(ССЫЛКА ТУТ). Там было обширное количество вопросов связанных с применением баз данных в Java для получения доступа к данных и манипуляциями над ними.
Один из вопросов был посвящен Data Access Object (DAO). Но, сегодня мы бросим взгляд на DAO и идущий рядом с ним шаблон проектирования Repository. Оба шаблона проектирования применяются для управления доступом к данным в информационных системах, но между ними есть различия, что и определяют когда и почему выбрать один шаблон, а не другой.
▶️ Data Access Object (DAO)
➖Определение. DAO предоставляет абстракцию для доступа к данным, изолируя бизнес-логику от деталей доступа.
➖Основная Цель. Сосредоточиться на манипуляции с данными и скрыть детали их хранения.
➖Пример Интерфейса
```
public interface UserDAO {
User getById(long id);
void save(User user);
void update(User user);
void delete(User user);
}
```
▶️ Repository
➖Определение. Repository также служит для управления доступом к данным, но с более высокоуровневой абстракцией, ориентированной на агрегации данных.
➖Основная Цель. Предоставить интерфейс для работы с коллекцией объектов, скрывая детали хранения и запросов.
➖Пример Интерфейса
```
public interface UserRepository {
User findById(long id);
List<User> findAll();
void save(User user);
void update(User user);
void delete(User user);
}
```
▶️ Способы Взаимодействия с Объектами
➖DAO. Обычно взаимодействует с отдельными объектами или таблицами в базе данных.
➖Repository. Ориентирован на работу с коллекциями объектов, обеспечивает методы для поиска всех объектов, фильтрации и других операций с коллекцией.
▶️ Гибкость и Уровень Абстракции
➖DAO. Предоставляет более низкоуровневую абстракцию, подразумевая, что клиент может более явно управлять операциями с данными.
➖Repository. Предоставляет более высокоуровневую абстракцию для работы с коллекцией объектов, что может быть удобным для клиентского кода.
▶️ Область Применения
➖DAO. Часто используется, когда нужен более прямой и точечный доступ к данным.
➖Repository. Подходит, когда важна работа с коллекциями данных, например, при работе с агрегатами.
▶️ Производительность
➖DAO. Может быть более производительным, поскольку предоставляет более низкоуровневый доступ к данным.
➖Repository. Обеспечивает более высокоуровневую абстракцию, что может потребовать дополнительной работы для оптимизации.
▶️ Пример Комбинации
➖DAO и Repository. Иногда комбинированный подход может быть эффективен, где DAO используется для операций с отдельными объектами, а Repository для работы с коллекциями.
⬇️ А тебе когда-либо приходилось реализовывать DAO или Repository? Пиши в комментариях
👍 Поставь лайк этому посту, если тебе нравятся наш контент
2 минуты
9 октября 2024