intermediate

Repository

Encapsulate persistence queries за collection-like methods, когда это проясняет domain access и не leaking storage details.

Repository инкапсулирует персистентность за collection-like методами — `findById`, `save`, `delete` — чтобы application code говорил на языке домена, а не SQL/ORM. Проясняет, где живут запросы, и даёт in-memory fakes в тестах. Repositories не должны поглощать оркестрацию бизнеса.

На интервью: Repository vs Active Record и raw DAOs. Repository aggregate-root vs generic CRUD на каждую таблицу.

Типовые ошибки: repositories везде возвращают ORM entities; N+1 в convenience methods; god repositories с десятками query variants.

Компромисс — гибкость против сложности: знайте, когда достаточно более простого пути.

Чеклист:

  • Интерфейс в application или domain layer.
  • Реализация в infrastructure.
  • Запросы выражают доменные потребности доступа.
  • Тесты на in-memory или fake repositories.