DAO и шаблон репозитория являются способами реализации уровня доступа к данным (DAL).Итак, давайте начнем с DAL. Сначала.
Объектно-ориентированные приложения, которые обращаются к базе данных, должны иметь некоторую логику для обработки доступа к базе данных.Чтобы сохранить код чистым и модульным, рекомендуется, чтобы логика доступа к базе данных была изолирована в отдельный модуль.В многоуровневой архитектуре этот модуль является DAL.
До сих пор мы не говорили о какой-либо конкретной реализации: только общий принцип, заключающийся в размещении логики доступа к базе данных в отдельном модуле.
Теперькак мы можем реализовать этот принцип?Хорошо, один из известных способов реализации этого, в частности с помощью таких сред, как Hibernate, - это шаблон DAO.
Шаблон DAO - это способ создания DAL, где обычно каждый объект домена имеет свой собственный DAO.Например, User
и UserDao
, Appointment
и AppointmentDao
и т. Д. Пример DAO с Hibernate: http://gochev.blogspot.ca/2009/08/hibernate-generic-dao.html.
Тогда что такое шаблон репозитория?Как и DAO, шаблон репозитория также является способом достижения DAL.Основной момент в шаблоне репозитория заключается в том, что с точки зрения клиента / пользователя он должен выглядеть или вести себя как коллекция.Под поведением «коллекции» подразумевается не то, что ее нужно создавать как Collection collection = new SomeCollection()
.Вместо этого это означает, что он должен поддерживать такие операции, как добавление, удаление, содержание и т. Д. Это суть шаблона репозитория.
На практике, например, в случае использования Hibernate, шаблон Repository реализуется с помощью DAO.То есть экземпляр DAL может быть одновременно экземпляром шаблона DAO и шаблоном репозитория.
Шаблон репозитория не обязательно является чем-то, что строится поверх DAO (как некоторые могут предположить).Если DAO спроектированы с интерфейсом, который поддерживает вышеупомянутые операции, то это экземпляр шаблона репозитория.Подумайте об этом: если DAO уже предоставляют набор операций, подобный коллекции, тогда зачем нужен дополнительный слой поверх него?