Глоссарий
Repository
Абстракция над persistence, скрывающая, где и как хранятся aggregate. Работает 1:1 с Aggregate Root.
Repository — паттерн из Domain-Driven Design (Evans, 2003) и PoEAA (Fowler, 2002).
Evans: repository = «иллюзия in-memory коллекции» aggregate-корней. Скрывает persistence — клиент не знает, откуда данные (БД, кэш, файл).
Ключевые правила:
- Один Repository = один Aggregate Root.
- Возвращает Aggregate, не DTO.
- Методы называются бизнесовыми запросами, не CRUD.
- Не пропускает наружу query builders (
IQueryable,Select).
Разница с DAO: DAO ориентирован на таблицу и CRUD; Repository — на aggregate и бизнес-операции.
Vernon выделяет два стиля:
- Collection-oriented — add/remove, изменения сохраняются автоматически (identity map).
- Persistence-oriented — save/delete, изменения фиксируются явно.
Второй лучше для async и явного контроля транзакций.