Управление транзакциями либо на уровне сервиса, либо на уровне хранилища?
-
20-09-2019 - |
Вопрос
У меня есть определенный сценарий, в котором вставки и обновления выполняются в нескольких таблицах на основе некоторых ограничений .. поэтому естественно использовать область транзакций для этих сценариев.Теперь у меня есть уровень ответственности и уровень обслуживания.сервисный уровень опосредует репозиторий и пользовательский интерфейс и постоянно находится в неведении.Теперь я запутался, где использовать транзакции либо в сервисе, либо в слоях репозитория.Я не использую никаких ORM.Я также видел людей, выступающих за шаблон Unit of work для таких сценариев.есть ли какие-либо примеры шаблона unit of work, который соответствует моим текущим сценариям, все примеры, которые я видел, используют ORM.
Спасибо,
Решение
Конечно, это будет зависеть от вашей системы, но обычно я бы делал это на уровне сервиса.Особенно, если ваши методы уровня сервиса вызывают несколько детализированных методов репозитория и ожидают, что они либо полностью зафиксируют, либо полностью откатят.
Другие советы
Некоторые вопросы, которые могут помочь ответить на этот вопрос.
Какой уровень понимает транзакционные требования?Какова степень детализации интерфейса вашего репозитория?
В моем мире мы, как правило, выполняем мелкозернистые операции сохранения: Вставляем, Обновляем, Удаляем.а затем скомпоновать их на сервисном уровне.Следовательно, в этой среде мне кажется очевидным, что именно уровень сервиса понимает область действия транзакции.