
Репозиторий является посредником между слоем доступа к данным и доменным слоем,
работая как in-memory коллекция доменных обектов. Клиенты создают декларативные
описания запросов и передают их в репозиторий для выполнения.
— свободный перевод Мартина Фаулера
EntityFraemwork предоставляет нам готовую реализацию паттернов Repository: DbSet<T>
и UnitOfWork: DbContext
. Но мне часто приходится видеть, как коллеги используют в своих проектах собственную реализацию репозиториев поверх существующих в EntityFraemwork.
Чаще всего используется один из двух подходов:
- Generic Repository как попытка абстрагироваться от конкретного ORM.
- Repository как набор запросов к выбранной таблице БД (паттерн DAO).
И каждый из этих подходов содержит недостатки.