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 осознанно до ответа клиенту.