🗄 Борьба за Доступ к Данным: 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? Пиши в комментариях 👍 Поставь лайк этому посту, если тебе нравятся наш контент Заглядывай к нам в Телеграм канал и забирай полезный и актуальный контент из мира программирования
5 месяцев назад