Сервисный класс должен стремиться быть автономным и должен позаботиться о вызове своего собственного метода save () для репозитория, который он использует.Таким образом, это позволяет абстрагировать хранилище от своих потребителей.Что, если он решит отказаться от хранилища, например?Если вызываемый отвечает за сохранение (), то вызываемый () тоже должен измениться.Это приведет к хрупкости кода.
Однако транзакции - это другое дело.
Класс обслуживания должен участвовать в глобальной транзакции, если она уже была запущена вызываемой стороной.В отсутствие глобальной транзакции класс обслуживания должен начинать и заканчивать свою собственную транзакцию.Следовательно, метод save () будет фактически «фиксироваться» только в конце транзакции, независимо от того, был ли он запущен самим классом обслуживания или вызываемым пользователем.