Объект доступа к данным
В программном обеспечении объект доступа к данным ( DAO ) — это шаблон, который обеспечивает абстрактный интерфейс к некоторому типу базы данных или другому механизму сохранения данных . Сопоставляя вызовы приложений с уровнем персистентности, DAO обеспечивает операции с данными, не раскрывая детали базы данных. Эта изоляция поддерживает принцип единой ответственности . Он отделяет доступ к данным, необходимый приложению, с точки зрения объектов и типов данных, специфичных для предметной области (открытый интерфейс DAO), от того, как эти потребности могут быть удовлетворены с помощью конкретной СУБД (реализация DAO).
Хотя этот шаблон проектирования применим к большинству языков программирования, большинству программного обеспечения с потребностями в сохранении данных и большинству баз данных, он традиционно ассоциируется с приложениями Java EE и реляционными базами данных (доступ к которым осуществляется через JDBC API, поскольку он возник в Sun Microsystems ). руководствах по передовому опыту [ 1 ] «Основные шаблоны J2EE».
Этот объект можно найти на уровне доступа к данным трехуровневой архитектуры .
Существуют различные способы реализации этого объекта:
- Один DAO для каждой таблицы.
- Один DAO для всех таблиц для конкретной СУБД.
- Если запрос SELECT ограничен только целевой таблицей и не может включать JOINS, UNIONS, подзапросы и общие табличные выражения (CTE).
- Где запрос SELECT может содержать все, что позволяет СУБД.
Преимущества
[ редактировать ]Использование объектов доступа к данным (DAO) дает явное преимущество: оно разделяет две части приложения, которым не нужно знать друг о друге. Такое разделение позволяет им развиваться независимо. Если бизнес-логика изменится, она может полагаться на согласованный интерфейс DAO. Между тем, изменения в логике персистентности не повлияют на клиентов DAO. [ 2 ] [ 3 ]
Все детали хранилища скрыты от остальной части приложения (см. скрытие информации ). Код модульного тестирования упрощается за счет замены DAO в тесте на тестовый дубль , что делает тесты независимыми от уровня персистентности.
В контексте языка программирования Java DAO можно реализовать различными способами. Это может варьироваться от довольно простого интерфейса, который отделяет доступ к данным от логики приложения, до платформ и коммерческих продуктов.
Такие технологии, как Java Persistence API и Enterprise JavaBeans, встроены в серверы приложений и могут использоваться в приложениях, использующих сервер приложений Java EE. коммерческие продукты, такие как TopLink, Доступны на основе объектно-реляционного отображения (ORM). Популярное программное обеспечение ORM с открытым исходным кодом включает в себя Doctrine , Hibernate , iBATIS и реализации JPA, такие как Apache OpenJPA . [ 4 ]
Недостатки
[ редактировать ]Потенциальные недостатки использования DAO включают дырявую абстракцию , [ нужна ссылка ] дублирование кода и инверсия абстракции . В частности, абстракция DAO как обычного объекта Java может скрыть высокую стоимость каждого доступа к базе данных. Разработчики могут случайно выполнить несколько запросов к базе данных для получения информации, которая может быть возвращена за одну операцию. Если приложению требуется несколько DAO, для каждого DAO может потребоваться написать один и тот же код создания, чтения, обновления и удаления. [ 5 ]
Обратите внимание, что эти недостатки проявляются только в том случае, если у вас есть отдельный DAO для каждой таблицы и запрос SELECT не может получить доступ ни к чему, кроме целевой таблицы.
Инструменты и фреймворки
[ редактировать ]- ODB для C++ (ORM) на основе компилятора объектно-реляционного отображения Система
- ORMLite: облегченная платформа объектно-реляционного отображения (ORM) на Java для JDBC и Android. [ 6 ]
- Microsoft Entity Framework
- DBIx::Class объектно-реляционного отображения Модуль (ORM) для Perl
- TuxORM: Простая объектно-реляционного отображения (ORM) на Java для JDBC. библиотека
- Persist (инструмент Java) и доступа к данным на основе Java. объектно-реляционного сопоставления Инструмент
См. также
[ редактировать ]- Создание, чтение, обновление и удаление (CRUD)
- Уровень доступа к данным
- Объекты сервисных данных
- Объектно-реляционное отображение
Ссылки
[ редактировать ]- ^ «Основные шаблоны J2EE — объекты доступа к данным» . Sun Microsystems Inc., 2 августа 2007 г.
- ^ «Шаблон проектирования объекта доступа к данным (DAO)» . Цифровой Океан . 03.08.2022 . Проверено 8 июля 2024 г.
- ^ «Шаблон проектирования объекта доступа к данным (DAO)» . Гики для Гиков . 26 августа 2017 г. Проверено 8 июля 2024 г.
- ^ «Шаблон проектирования объекта доступа к данным (DAO)» . Гики для Гиков . 26 августа 2017 г. Проверено 29 января 2024 г.
- ^ См . http://www.ibm.com/developerworks/java/library/j-genericdao/index.html для обходных путей.
- ^ Ходжсон, Кайл; Рид, Даррен (23 января 2015 г.). Рецепты ServiceStack 4 . Packt Publishing Ltd. с. Глава 4. ISBN 9781783986576 . Проверено 22 июня 2016 г.