Лучшие практики Spring-MVC: зачем ставить транзакции на сервисы, а не на DAO? - PullRequest
8 голосов
/ 13 ноября 2010

Я изучаю Spring-MVC в моем первом проекте здесь.

После прочтения документации по транзакциям я заметил, что во всех примерах транзакции размещаются вокруг сервисных объектов / методов , а неDAO (объекты / методы доступа к данным).

Я задавался вопросом, почему.Не зная лучше, я бы подумал добавить транзакции вокруг большинства моих методов DAO , которые обращаются к базе данных (мое мышление: база данных = транзакции).У меня пока нет многих методов обслуживания, которые охватывают несколько DAO (но я думаю, это могло бы послужить причиной для обозначения служб как транзакционных).

Вопрос:
Я просто хочузнать, что другие делают в этой ситуации.Естественно ли вы проводите транзакции вокруг элемента самого низкого уровня, который вы можете (например, всегда вокруг DAO, и вокруг сервисов только тогда, когда они охватывают несколько DAO таким образом, который требует транзакций)?услуги в качестве генерального директора?Таким образом, придерживаясь одного слоя, потому что это более всеобъемлющее в долгосрочной перспективе?

Ответы [ 3 ]

4 голосов
/ 13 ноября 2010

За свои деньги я пытаюсь поместить транзакцию в самую грубую точку, возможную в приложении, это, как правило, объект, подобный сервису / менеджеру, который координирует вызовы к одному или нескольким более совершенным вызовам дао.

Теоретически вы можете размещать транзакции повсюду, от сервисов до даосов, при условии, что они определены для присоединения к существующей транзакции, если это необходимо. На практике я нашел это менее чем полезным, так как он не нужен и просто раздражает вас при попытке отладки кода.

2 голосов
/ 13 ноября 2010

Это делается для того, чтобы данные, выбранные вами / запрошенные из источника данных, оставались действительными во время обработки данных.

В другом случае (размещение транзакций в DAO) данные могут быть изменены во время обработки данных и могут привести к неверным результатам.

0 голосов
/ 29 июня 2012

Остальные ответы верны, но для придания цвета ответам: транзакция идет на сервисном уровне, она должна заключать в себе элементарный элемент бизнес-логики. Поскольку эта бизнес-логика должна быть автономной без вмешательства другой бизнес-логики, транзакции должны быть на уровне обслуживания.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...