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.