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