LINUX.ORG.RU

Уровень доступа к данным в веб-сервере (java, spting-mvc, jpa)

 , , , ,


0

2

В рамках изучения java пишу небольшой сайт / restful-api-сервер c использованием spring-mvc, jpa, hibernate. В данной книге, да и во многих статьях в интернетах слой доступа к данным предлагают размазывать по множеству интерфейсов. Как правило в примерах приводится работа с одной единственной сущностью, например Contact, для работы с которой описывается интерфейс ContactService с набором методов аля удалить, обновить, найти по колонке, вернуть все, класс ContactServiceImpl - реализация обращающаяся к методам ContactRepository - интерфейс, наследуемый от CrudRepository<Contact, Long>. Получается как минимум два интерфейса и один класс на сущность. А если у меня этих сущностей тридцать штук? Подскажите best practices по реализации уровня доступа к данным. Может быть есть менее многословный подход?

Я бы описала бы один интерфейс с шаблонными методами для CRUD и при необходимости добавляла бы в него методы для сложных запросов, в реализации этого интерфейса использовала бы EntityManager напрямую. Но чувствую за такой подход меня закидали бы тухлыми помидорами. Почему?


Репозиторий это интерфейс для низкоуровневой работы с сущностями. Insert/Delete/Update/Select. Обычно в реализации будет просто 1 вызов SQL. Если используешь ORM, то он тебе предоставляет этот слой и отдельно его писать смысла нет, там все методы будут просто вызывать соответствующий метод в ORM (разве что у тебя есть планы миграции с этого ORM и ты хочешь его отгородить за отдельным слоем, чтобы потом иметь возможность легко заменить). Сервис это интерфейс для более высокоуровневой работы. Тут всё зависит от проекта. Например если это сайт ЛОРа, сервис по добавлению комментария может добавить комментарий в базу, обновить счётчик комментариев автора, добавить оповещения всем подписанным на тему и тд, т.е. сделать множество действий с БД.

А вообще это всё вилами по воде писано и 100% советов тут дать нельзя. Иногда слой репозитория избыточен. Иногда все сервисы это тупо вызов метода репозитория и смысла не имеют. Надо думать головой и понимать, какие есть плюсы и минусы в введении каждого класса и каждого слоя. Универсального рецепта нет.

Legioner ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.