Spring. Для чего нужен cервис-слой?

Во всех гайдах дают такую структуру проекта:

image

В тех же гайдах глядя в код видно только то, что сервис-слой полностью дублирует DAO. Для чего всё таки нужен этот слой? Как его правильно использовать?
  • Вопрос задан
  • 20272 просмотра
Пригласить эксперта
Ответы на вопрос 5
Losted
@Losted
Software Architect
Дублирует он DAO только в примитивных случаях. Например, сервисный слой позволяет создавать транзакционные операции с использованием нескольких дао модулей.
Ответ написан
Комментировать
javax
@javax
Software Architect, Java Developer since 1996
В сервис слое сидит бизнес логика, для реализации которой он обращается к разным ДАО
Ответ написан
Комментировать
@IDVsbruck
Это общие слова и терминология человека, понимающего досконально или почти досконально структуру и принципы взаимодействия внутри контейнера Спринг. Да и логика очень часто несложная в сервисах — получить данные и иногда трансформировать их для отдачи контроллем. Понятно, встречаются и сложные сервисы, но в подавляющем большинстве это просто получение данных из базы по критериям.

Пользуясь не один год этим фреймворком, тоже часто грешил тем, что выкидывал сервис-слой, делегируя его функционал слою DAO (только как правильно заметил один гуру с одного ресурса, в терминологии Спринга называть этот слой правильно не DAO, а репозиторий — Repository). Было просто и удобно, тем более, что при небольших проектах фактически код в дао и сервисе повторяются. А различия заключаются в том, что @ Repository — наш DAO — это бин-синглтон, и при доступе к нему несколькими потоками, что для MVC — нормальная вещь, может произойти доступ к одним данным из разных потоков. Видимость же @ Service определена видимостью вызывающего @ Controller. Возможно, с определением и терминологией наблюдаются у меня некоторые напряги, да и тонкую настройку компонентов наверняка можно сделать, но общий принцип и назначение переданы.
Ответ написан
@relgames
Java Developer
А я вот никогда не понимал необходимость DAO. По сути, это просто обертка над EntityManager. С появлением Spring Data это стало еще более очевидным. Но могу ошибаться, не очень много опыта по этой сфере.
Ответ написан
@dikkini
Слой policy заместо service. Service - DAO, Policy - бизнес логика. В одном проекте так начал делать, да и привык.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы