Я использую отдельный слой для обработки единиц работы / транзакций. Мои DAO довольно просты и обрабатывают только прямой доступ к базе данных. Часто одна задача включает несколько взаимодействий DAO, но в одной транзакции (обновление нескольких таблиц, получение данных и условное обновление и т. Д.). Перемещаясь вверх по слою, я могу добавить аннотацию @Transactional к задаче (при условии, что мы используем Spring, но концепция работает без него) и дополнительно инкапсулировать ее.