Найти в Дзене

🗄 Борьба за Доступ к Данным: 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 минуты