Подтвердить что ты не робот

Как шаблон репозитория отличается от простого уровня доступа к данным?

Меня смутило то, что я читал во время моих исследований по шаблону репозитория. Мне интересно, если люди (неправильно?) Используют это слово, когда они просто означают уровень доступа к данным.

Поскольку "репозиторий" не найден в индексе шаблонов проектирования (GoF), я обратился к шаблонам архитектуры корпоративных приложений (Fowler). Фаулер кажется довольно ясным (стр. 323), когда он утверждает, что клиенты создают объект критериев и передают его в репозиторий для получения результатов. Это выглядит примерно так:

public class Person
{
    public List<Person> Dependents()
    {
        Repository repository = Registry.personRepository();
        Criteria criteria = new Criteria();
        criteria.equal(Person.BENEFACTOR, this);
        return repository.matching(criteria);
    }
}

Является ли объект критериев тем, что делает репозиторий хранилищем? Если нет, что делать? Если абстрагирование механизма персистентности (и, следовательно, построение запросов) является целью, каким образом репозиторий отличается от вызова DAL/ORM simpe следующим образом:

public class PersonLogic
{
    public List<Person> GetDependents()
    {
        IPersonData personData = DependencyContainer.Resolve<IPersonData>();
        return personData.GetDependents();
    }
}

Для меня разница выглядит так:
* С шаблоном репозитория клиент строит различные объекты критериев и вызывает на нем метод Matching().
* С помощью простого DAL клиенты просто называют разные методы на основе того, что они хотят.

Есть ли еще больше, чем это? Ошибочно ли программисты используют термин "репозиторий", когда они действительно означают DAL?

ИЗМЕНИТЬ

Дэвид Осборн отправил эту ссылку в Шаблоны сохранения. В нем указано:

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

Это действительно тот уровень доступа к данным. Мне кажется, что репозиторий и DAL - это одно и то же, и, возможно, "истинный" репозиторий использует объект критериев.

4b9b3361

Ответ 1

Взгляните на "Использование интерфейса IQueryable" и далее на Расширение и усиление ограничений, связанных с ордерами и регистрами. Он обеспечивает проницательное и сбалансированное обсуждение реализаций DAO/Repository.

Как впоследствии подчеркивается Боб Хорном, "Устойчивые шаблоны" , в статье показано, что:

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

Ответ 2

В общем, я согласен с утверждениями автора, но я хотел бы добавить некоторые подробности

Разница между репозиторием и DAL/ORM, которая сначала не только абстрагирует механизм персистентности, но также обеспечивает коллекционный интерфейс для доступ к объектам домена... и изолирует объекты домена от деталей кода доступа к базе данных:

Различия

Для внешних слоев, например Business Logic:

  • Помогает избежать нечеткой абстракции. Внешние слои зависят от абстракции репозитория, а не от конкретной реализации DAL/ORM. Таким образом, вы можете избежать всех инфраструктурных и логических зависимостей во время работы с репозиторием.
  • работает с объектами домена, а не с экземплярами POJO/POCO/DTO
  • Операции CRUD применяются к подобному коллекции интерфейсу, предоставляемому репозиторием, а не к конкретным методам DAL/ORM. Например : работа с коллекцией, которая реализует IEnumerable, а не контекст или session

Сходства

Репозиторий содержит DAL/ORM под ним и выполняет ту же цель