JPA интерфейс - это ДАО обьект который должен жить в слое персистентности (инфраструктуры).
Чтобы обеспечить изоляцию инфраструктурного слоя (с целью недопущения прямого использования в сервисе или контроллере методов JPA интерфейса) между ним и сервисом в слое персистентности делают адаптер в который включают медоды позволенные к использованию.
Такой адаптер реализует интерфейс ДАО или доменный.
У JPA интерфейса и адаптера видимость пакетная (без модификатора паблик).
А сервис работает с интерфейсом ДАО.
Такой дизайн позволяет менять реализацию базы данных и осуществлять фейковое тестирование, что затруднительно при другом дизайне приложения.
У Вас интересная точка зрения! Как - то не задумывался об этом. Почитаю Ваши статьи. Будет предмет для изучения и беседы. У Вас аккаунта в линкдин и на гитхабе нет?
Спасибо за замечание! Упустил некоторые моменты как само собой разумеющиеся. Правки внёс.
От Spring отказываться никто не призывает — это отличный контейнер и де-факто стандарт. Но минимизировать его влияние на внутреннее устройство системы — это уже другой вопрос.
JPA интерфейс - это ДАО обьект который должен жить в слое персистентности (инфраструктуры).
Чтобы обеспечить изоляцию инфраструктурного слоя (с целью недопущения прямого использования в сервисе или контроллере методов JPA интерфейса) между ним и сервисом в слое персистентности делают адаптер в который включают медоды позволенные к использованию.
Такой адаптер реализует интерфейс ДАО или доменный.
У JPA интерфейса и адаптера видимость пакетная (без модификатора паблик).
А сервис работает с интерфейсом ДАО.
Такой дизайн позволяет менять реализацию базы данных и осуществлять фейковое тестирование, что затруднительно при другом дизайне приложения.
Советую глянуть там четко все разложено.
https://dykyi-roman.github.io/projects/architecture-visualizer/?lang=ru#mvc/mvc
https://github.com/spring-backend-architecture/architecture-layered-sample/tree/main
У Вас интересная точка зрения! Как - то не задумывался об этом. Почитаю Ваши статьи. Будет предмет для изучения и беседы. У Вас аккаунта в линкдин и на гитхабе нет?
Если зависимость на Spring Data считается несущественной, то по этой логике можно и JpaRepository напрямую в контроллер передавать.
Но тогда теряется изоляция слоёв, а тестирование бизнес-логики без Spring-контекста становится заметно сложнее.
Помните тот веселый советский мультик? Там мальчик постоянно повторял - а, и так сойдет! В общем в конце он очень раскаялся.
Спасибо за замечание! Упустил некоторые моменты как само собой разумеющиеся. Правки внёс.
От Spring отказываться никто не призывает — это отличный контейнер и де-факто стандарт. Но минимизировать его влияние на внутреннее устройство системы — это уже другой вопрос.