advanced
Unit of Work
Отслеживайте changed objects и commit как одну business transaction с explicit ordering и rollback behavior.
Unit of Work отслеживает загруженные и изменённые сущности, затем сбрасывает insert, update и delete как согласованный commit. Хорошо сочетается с identity map в scope запроса или транзакции.
Scope запроса
Identity map: id строки → экземпляр сущности
Unit of Work: множества new | dirty | deleted
flush() → упорядоченный SQL в одной транзакции
На интервью: обсудите отслеживание изменений, момент flush, каскады, scope транзакции и как скрытый flush может удивить обработчик API.
Типовые ошибки: долгоживущий Unit of Work со stale-состоянием и памятью; неявный flush в неожиданный момент; ожидание, что каждая запись в свойство сразу пишет в БД.
Компромисс — удобные object graph против явного контроля момента выполнения SQL.
Чеклист:
- Знайте, когда изменения отслеживаются.
- Знайте, когда уходит SQL.
- Контролируйте scope запроса и транзакции.
- Делайте flush осознанно до ответа клиенту.