есть слой service и есть repository.
как лучше реализовать транзакционность запросов к бд?
Допустим у меня есть методы: Insert() и List().
1) В сервисном слое написать что то типа s.db.BeginTransaction() и внунтри вызывать методы Insert(tx), List(tx).
2) Спрятать весь этот функционал внутри репозитория?
Это плохо когда репозиторий знает слишко много о реализации того или иного метода, поэтому я рассматриваю и первой варик
Если транзакции базы данных вы используете, чтобы собирать нормализованные данные из нескольких таблиц в один "объект", то это как раз валидная задача для слоя данных, ей незачем протекать на уровень бизнес-логики Если вы бизнес-транзакции реализовываете через транзакции уровня базы данных, то это уже не чистая архитектора просто. Независимость от способа хранения данных нарушается и переехать на нереляционную или полуреляционную базу уже не получится. Не всегда отказ от чистой архитектуры это плохо, просто тут нужно решение принять при осознании рисков
При переходе на другой сторадж будет транзакция которая ничего не делает. Другой вопрос, что в принципе уже не будет возможность перехода на другой сторадж, который не поддерживает транзакции
Обсуждают сегодня