Вам бонус- начислено 1 монета за дневную активность. Сейчас у вас 1 монета

Шаблон DAO примеры, достоинства и недостатки

Лекция



Привет, Вы узнаете о том , что такое dao, Разберем основные их виды и особенности использования. Еще будет много подробных примеров и описаний. Для того чтобы лучше понимать что такое dao, шаблон dao, паттерн dao , настоятельно рекомендую прочитать все из категории Проектирование веб сайта или программного обеспечения.

1. Обзор

Шаблон Data Access Object (DAO) является структурным шаблоном, который позволяет нам изолировать прикладной/бизнес-уровень от постоянного уровня (обычно это реляционная база данных, но это может быть любой другой постоянный механизм) с использованием абстрактного API .

Функциональность этого API заключается в том, чтобы скрыть от приложения все сложности, связанные с выполнением операций CRUD в базовом механизме хранения. Это позволяет обоим слоям развиваться отдельно, ничего не зная друг о друге.

В этом уроке мы углубимся в реализацию шаблона и узнаем, как использовать его для абстрагирования вызовов к Менеджер сущностей JPA .

2. Простая реализация

Чтобы понять, как работает шаблон dao , давайте создадим базовый пример.

Допустим, мы хотим разработать приложение, которое управляет пользователями. Для того чтобы модель домена приложения не зависела от базы данных, мы создадим простой класс DAO, который позаботится о том, чтобы эти компоненты были аккуратно отделены друг от друга .

2.1. Домен Класс

Поскольку наше приложение будет работать с пользователями, нам нужно определить только один класс для реализации его доменной модели:

 Шаблон DAO примеры, достоинства и недостатки

Класс User представляет собой простой контейнер для пользовательских данных, поэтому он не реализует никакого другого поведения, заслуживающего внимания.

Конечно, самый важный выбор дизайна, который нам нужно сделать здесь, - это как сохранить приложение, использующее этот класс, изолированным от любого механизма персистентности, который может быть реализован в какой-то момент.

Ну, это именно та проблема, которую пытается решить шаблон DAO.

2.2. DAO API

Давайте определим базовый уровень DAO, чтобы мы могли видеть, как он может полностью отделить модель домена от уровня постоянства.

Вот API DAO:

 Шаблон DAO примеры, достоинства и недостатки

С высоты птичьего полета ясно, что интерфейс Dao определяет абстрактный API, который выполняет операции CRUD над объектами типа T .

Благодаря высокому уровню абстракции, который обеспечивает интерфейс, легко создать конкретную, детальную реализацию, которая работает с объектами User .

2.3. UserDao Класс

Давайте определим пользовательскую реализацию интерфейса Dao :

 Шаблон DAO примеры, достоинства и недостатки

Шаблон DAO примеры, достоинства и недостатки

Класс UserDao реализует все функции, необходимые для извлечения, обновления и удаления объектов User .

  • Для простоты users List действует как база данных в памяти, которая заполнена парой объектов User в конструкторе **

Конечно, легко реорганизовать другие методы, чтобы они могли работать, например, с реляционной базой данных.

Хотя оба класса User и UserDao сосуществуют независимо в одном и том же приложении, нам все еще необходимо выяснить, как последний может использоваться для сохранения уровня персистентности скрытым от логики приложения:

 Шаблон DAO примеры, достоинства и недостатки

Пример придуман, но в двух словах показывает мотивы, лежащие в основе шаблона DAO. В этом случае метод main просто использует экземпляр UserDao для выполнения операций CRUD над несколькими объектами User .

  • Наиболее значимым аспектом этого процесса является то, как UserDao скрывает от приложения все низкоуровневые сведения о том, как объекты сохраняются, обновляются и удаляются ** .

3. Об этом говорит сайт https://intellect.icu . Использование шаблона с JPA

Среди разработчиков существует общая тенденция думать, что выпуск JPA снизил до нуля функциональность шаблона DAO, поскольку шаблон становится просто еще одним уровнем абстракции и сложности, реализованным поверх уровня, предоставляемого менеджером сущностей JPA.

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

3.1. JpaUserDao Класс

С учетом вышесказанного давайте создадим новую реализацию интерфейса Dao , чтобы мы могли увидеть, как он может инкапсулировать функциональность, предоставляемую менеджером сущностей JPA из коробки:

 Шаблон DAO примеры, достоинства и недостатки

Шаблон DAO примеры, достоинства и недостатки

  • Класс JpaUserDao способен работать с любой реляционной базой данных, поддерживаемой реализацией JPA. **

Кроме того, если мы внимательно посмотрим на класс, мы поймем, как использовать https://en.wikipedia.org/wiki/Composition over inheritance[Composition]и Dependency Инъекция позволяет нам вызывать только методы менеджера сущностей, требуемые нашим приложением.

Проще говоря, у нас есть специализированный API для конкретного домена, а не весь API менеджера сущностей.

3.2. Рефакторинг класса User

В этом случае мы будем использовать Hibernate в качестве реализации по умолчанию для JPA, поэтому мы соответствующим образом проведем рефакторинг класса User :

 Шаблон DAO примеры, достоинства и недостатки

3.3. Начальная загрузка JPA Entity Manager программно

Предполагая, что у нас уже есть работающий экземпляр MySQL, работающий локально или удаленно, и таблица базы данных «пользователи» , заполненная некоторыми записями пользователей, нам нужно получить диспетчер сущностей JPA, чтобы мы могли использовать класс JpaUserDao для выполнения операций CRUD в базе данных.

В большинстве случаев мы выполняем это с помощью типичного файла «persistence.xml», который является стандартным подходом

В этом случае мы воспользуемся подходом xml-less и получим менеджер сущностей с простой Java через удобный https://docs.jboss.org/hibernate/orm/5.0/javadocs/org/hibernate/ . jpa/boot/internal/EntityManagerFactoryBuilderImpl.html[EntityManagerFactoryBuilderImpl] класс.

Для получения подробного объяснения о том, как запустить реализацию JPA с помощью Java, перейдите по ссылке:/java-bootstrap-jpa[эта статья].

3.4. UserApplication Class

Наконец, давайте проведем рефакторинг исходного класса UserApplication , чтобы он мог работать с экземпляром JpaUserDao и выполнять операции CRUD с сущностями User :

  Шаблон DAO примеры, достоинства и недостатки

Даже когда пример довольно ограничен, он остается полезным для демонстрации того, как интегрировать функциональность шаблона DAO с той, которую предоставляет менеджер сущностей.

В большинстве приложений есть структура DI, которая отвечает за внедрение экземпляра JpaUserDao в класс UserApplication . Для простоты мы опустили детали этого процесса.

Наиболее важный момент, на который следует обратить внимание, заключается в том, как класс JpaUserDao помогает полностью исключить независимость класса UserApplication от того, как уровень персистентности выполняет операции CRUD ** .

Кроме того, мы могли бы поменять MySQL на любую другую СУБД (и даже на плоскую базу данных) в будущем, и все же наше приложение продолжало бы работать как положено, благодаря уровню абстракции, обеспечиваемому интерфейсом Dao и менеджером сущностей ,

Преимущества использования шаблона проектирования DAO

Шаблон проектирования DAO или Data Access Object - хороший пример объектно-ориентированных принципов абстракции и инкапсуляции. Он отделяет логику сохраняемости от отдельного уровня, называемого уровнем доступа к данным, который позволяет приложению безопасно реагировать на изменения в механизме сохраняемости. Например, если вы перейдете от механизма сохранения на основе файлов к базе данных, ваше изменение будет ограничено уровнем доступа к данным и не повлияет на уровень службы или объекты домена. Объект доступа к данным или шаблон DAO в значительной степени стандартен в приложении Java, являясь ядром Java, веб-приложением или корпоративным приложением. Ниже приведены еще несколько преимуществ использования шаблона DAO в приложении Java:

Шаблон DAO примеры, достоинства и недостатки

  1. Шаблон проектирования DAO также обеспечивает низкую связь между различными частями приложения. При использовании шаблона проектирования DAO ваш уровень представления полностью независим от уровня DAO, и только уровень сервиса зависит от него, который также абстрагируется с помощью интерфейса DAO.

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

  3. Поскольку шаблон DAO основан на интерфейсе, он также продвигает принцип объектно-ориентированного проектирования «программирование для интерфейса, а не реализация», что приводит к гибкому и качественному коду.

  4. Сила шаблона DAO состоит в том, что они позволяют вам создать хороший уровень абстракции реальной системы хранения. Они обеспечивают более объектно-ориентированное представление уровня сохраняемости и четкое разделение между доменом и кодом, который фактически будет выполнять доступ к данным (прямой JDBC, структуры сохраняемости, ORM или даже JPA).

  5. Общие вызовы для получения объектов.
  6. После того, как вы настроили общий поток создания / чтения / обновления / удаления, общий макет можно повторить для других DAO.
  7. Он также консолидирует, где может идти конкретная часть вашего кода. Отделяет бизнес-логику от других компонентов вашего кода.
  8. абстрактное разделение
  9. единая точка определения для таблицы БД - Отображение атрибутов объекта
  10. прозрачная возможность реализации DAO для других типов хранилищ
  11. разработать шаблон интерфейса, которому следуют все DAO
  12. разработка более или менее стандартного тестового класса JUnit для результатов DAO в лучшем тестовом покрытии
  13. полный контроль над спецификой
  14. нет потери производительности из-за слишком общего решения
  15. Абстракция для реальной реализации доступа к базе данных отделяет стратегию доступа к данным от бизнес-логики пользователя. Это позволило нам выбрать краткосрочную стратегию реализации (шаблон Spring JDBC) для начальной фазы проекта с возможностью перехода на IBATIS или Hibernate позже. (Выбор, который мы не можем сделать в настоящее время.)
  16. Такое разделение дает значительные преимущества тестируемости, так как вся реализация доступа к данным может быть смоделирована в модульном тестировании. (Это, наверное, самое большое преимущество)
  17. Объединение этого со Spring позволяет нам внедрить любую реализацию БД в выбранную нами систему (хотя это, возможно, больше говорит о DI, чем о шаблоне DAO).

Недостатки использования шаблона DAO

  1. это еще один слой, который усложняет системы ... Но я думаю, это цена, которую нужно заплатить за то, чтобы не привязывать свой код к базовому API сохраняемости.
  2. Это не самая гибкая вещь.
  3. Если вы хотите отложить загрузку некоторых дочерних объектов, вам придется либо смешивать DAO с другими слоями, либо принимать меры предосторожности при попытке получить ленивые объекты.
  4. Если вы напишете DAO от руки, код может стать утомительным и повторяющимся.
  5. много шаблонного кода

4. Заключение

В этой статье мы подробно рассмотрели ключевые концепции шаблона DAO, как реализовать его в Java и как использовать его поверх менеджера сущностей JPA.

Вау!! 😲 Ты еще не читал? Это зря!

Исследование, описанное в статье про dao, подчеркивает ее значимость в современном мире. Надеюсь, что теперь ты понял что такое dao, шаблон dao, паттерн dao и для чего все это нужно, а если не понял, или есть замечания, то не стесняйся, пиши или спрашивай в комментариях, с удовольствием отвечу. Для того чтобы глубже понять настоятельно рекомендую изучить всю информацию из категории Проектирование веб сайта или программного обеспечения

создано: 2020-10-07
обновлено: 2021-10-28
132265



Рейтиг 2 of 10. count vote: 2
Вы довольны ?:


Поделиться:

Найди готовое или заработай

С нашими удобными сервисами без комиссии*

Как это работает? | Узнать цену?

Найти исполнителя
$0 / весь год.
  • У вас есть задание, но нет времени его делать
  • Вы хотите найти профессионала для выплнения задания
  • Возможно примерение функции гаранта на сделку
  • Приорететная поддержка
  • идеально подходит для студентов, у которых нет времени для решения заданий
Готовое решение
$0 / весь год.
  • Вы можите продать(исполнителем) или купить(заказчиком) готовое решение
  • Вам предоставят готовое решение
  • Будет предоставлено в минимальные сроки т.к. задание уже готовое
  • Вы получите базовую гарантию 8 дней
  • Вы можете заработать на материалах
  • подходит как для студентов так и для преподавателей
Я исполнитель
$0 / весь год.
  • Вы профессионал своего дела
  • У вас есть опыт и желание зарабатывать
  • Вы хотите помочь в решении задач или написании работ
  • Возможно примерение функции гаранта на сделку
  • подходит для опытных студентов так и для преподавателей



Комментарии


Оставить комментарий
Если у вас есть какое-либо предложение, идея, благодарность или комментарий, не стесняйтесь писать. Мы очень ценим отзывы и рады услышать ваше мнение.
To reply

Проектирование веб сайта или программного обеспечения

Термины: Проектирование веб сайта или программного обеспечения