Обновить
4
Дмитрий Руссу@DmitriiRussuLink

Java Backend Developer

Отправить сообщение

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 отказываться никто не призывает — это отличный контейнер и де-факто стандарт. Но минимизировать его влияние на внутреннее устройство системы — это уже другой вопрос.

Информация

В рейтинге
Не участвует
Зарегистрирован
Активность

Специализация

Бэкенд разработчик, Фулстек разработчик
Средний
Java
MySQL
Git
SQL
PostgreSQL
Linux
Английский язык
ООП
Docker
Redis