ООП
September 5, 2023

Репозиторий (Repository)

Выступает посредником между доменом и уровнями преобразования данных, используя интерфейс, напоминающий коллекции, для доступа к объектам домена. - Эдвард Хиетт и Роб Ми

Полное описание см. в разделе EAA(Patterns of Enterprise Application Architecture) на стр. 322.

Система со сложной моделью предметной области (доменом) часто выигрывает от наличия этого уровня, например, предоставляемого Data Mapper (165), который изолирует объекты предметной области от кода с деталями доступа к базе данных. В таких системах может оказаться целесообразным создать еще один уровень абстракции поверх уровня сопоставления, где сосредоточен код построения запроса. Это становится более важным, когда имеется большое количество классов предметной области или тяжелые запросы. В частности, в этих случаях добавление этого уровня помогает минимизировать дублирование логики запроса.

Репозиторий является посредником между уровнями домена и преобразования данных, действуя как коллекция объектов домена в памяти. Объекты клиента декларативно создают спецификации запроса и передают их в репозиторий для достижения желаемого результата. Объекты можно добавлять в репозиторий и удалять из него, как и из простой коллекции объектов, а код преобразования, инкапсулированный репозиторием, будет незаметно выполнять соответствующие операции. Концептуально репозиторий инкапсулирует набор объектов, хранящихся в хранилище данных, и операции, выполняемые над ними, обеспечивая более объектно-ориентированное представление уровня хранения. Также репозиторий поддерживает цель достижения четкого разделения и односторонней зависимости между уровнями домена и преобразования данных.

Вы можете найти хорошее описание этого шаблона в книге Domain Driven Design.

Источник: https://martinfowler.com/eaaCatalog/repository.html