Это действительно вопрос личного вкуса.
Лично мне нравится иметь границы транзакций на уровне сервиса. Если вы начинаете думать о SOA, каждый вызов службы должен быть независимым. Если ваш уровень представления должен вызывать 2 разные службы (мы можем утверждать, что это уже запах кода), тогда эти две службы должны вести себя независимо друг от друга, могут иметь разные конфигурации транзакций и т. Д. Не имея открытых транзакций вне Службы также помогают убедиться, что за пределами службы не происходит никаких изменений.
OTOH вам придется подумать немного больше о том, что вы делаете в своих сервисах (ленивая загрузка, группировка функций в одном и том же методе сервиса, если им нужна общая транзакция и т. Д.).
Один шаблон, который может помочь уменьшить ошибку отложенной загрузки, - это использовать Value Object вне уровня обслуживания. Службы должны всегда загружать все необходимые данные и копировать их в VO. Вы теряете прямое отображение между вашими постоянными объектами и вашим слоем представления (что означает, что вы должны написать больше кода), но вы можете обнаружить, что вы получаете ясность ...
Редактировать: Решение будет основано на компромиссах, поэтому я все еще думаю, что это по крайней мере частично вопрос личного вкуса. Транзакция на уровне сервиса кажется мне чище (более SOA-подобной, логика явно ограничена уровнем сервиса, разные вызовы четко разделены, ...). Проблема с этим подходом - LazyLoadingExceptions, которые могут быть решены с помощью VO. Если VO - это просто копия ваших постоянных объектов, то да, это явно нарушение принципа СУХОЙ. Если вы используете VO, как если бы вы использовали представление базы данных, VO - это упрощение ваших постоянных объектов. Это все еще будет больше кода для написания, но это сделает ваш дизайн более понятным. Это становится особенно полезным, если вам нужно подключить некоторую схему авторизации: если определенные поля видны только для определенных ролей, вы можете поставить авторизацию на уровне обслуживания и никогда не возвращать данные, которые не должны просматриваться.