Комментарии 2
Хорошая идея, особенно с оберткой InTransaction, взял на вооружение.
Не так давно решал такую же проблему, контекст тоже рассматривал. Для меня стояла задача сохранить чистые от транзакций репозитории. Чтоб они не знали с чем работают, транзакция это или просто соединение с базой.
В итоге с помощью дженериков сделал композитор, который оборачивает репозиторий и при вызове транзакции создает его, передав вместо db tx. В итоге все получилось, однако есть проблема в том что этот подход был реализован только для одного репозитория.
После вашей статьи захотелось развить свое решение для поддержки нескольких репозиториев, если получится напишу статью.
Спасибо!
Спасибо большое за фидбек. Честно скажу, о подходе Unit of Work я узнал позже. Он показался мне интересным, но особого профита для своего проекта я не увидел.
Как мне кажется, в таком случае use case должен принимать именно Unit of Work вместо репозиториев. И лучше не смешивать подходы, когда одни use case принимают репозитории, а другие unit of work, то есть всё должно быть в одном стиле.

Транзакции в Go через context: одна граница для нескольких репозиториев