Size: a a a

2020 November 06

A

Alex in pro.jvm
Dima
JPA не должна протекать дальше дао/репозитория
То есть вы из сервисов возвращаете DTO у себя?
источник

D

Dima in pro.jvm
Alex
То есть вы из сервисов возвращаете DTO у себя?
да
источник

A

Alex in pro.jvm
👍🏻 .
источник

D

Dima in pro.jvm
я вам открою секрет - ДТО может быть на любом уровне
источник

РН

Роман Нагаев... in pro.jvm
Alex
Лучшая практика создавать DTO? Сейчас опыта мало, хочется выбрать правильный путь и не переделывать )
создавай дто, конвертеры советую хранить в контексте так как из них может потребоваться доступ к репозиториям чтобы например референсы вытаскивать
источник

DM

Dmitry Maslov in pro.jvm
а я слышал, что дто в сервисном слое - такое себе
источник

D

Dima in pro.jvm
от плохих людей наверно слышали
источник

DM

Dmitry Maslov in pro.jvm
так обоснуй тогда, какие есть причины, чтобы конвертить сущность в дто в сервисе, а не в контроллере?
источник

A

Artjom Kalita in pro.jvm
Потому-что контроллер не для этого
источник

D

Dima in pro.jvm
Переслано от Dima
маппишь в сервисе, сервис возвращает дто, контроллеры тонкие
источник

D

Dima in pro.jvm
С этого места поподробнее, плз) Просто кто во что горазд: одни мапят в контроллере, другие в сервисе, и интересно, откуда ветер дует (есть книга/статья где это описано?)

Например здесь
https://www.baeldung.com/entity-to-and-from-dto-for-a-java-spring-application
есть такое

Let's now look at a service level operation – which will obviously work with the Entity (not the DTO):
источник

D

Dima in pro.jvm
Переслано от Dima
все очень просто, дто на самом деле может применяться на любое архитектурном слое приложения, это не противоречит паттерну никак
источник

D

Dima in pro.jvm
Переслано от Dima
тем более дто это не только классы с таким суффиксом, ну и любой дата-класс
источник

D

Dima in pro.jvm
Переслано от Dima
теперь что касается дто и сервисного слоя, тут тоже все очень просто
источник

D

Dima in pro.jvm
Переслано от Dima
сервисный слой есть слой бизнес-логики, который определяет границу транзакции
источник

D

Dima in pro.jvm
Переслано от Dima
по этой причине JPA-сущность не может никак присутствовать в веб-слое - она не может нормально функционировать без хаков в слое контроллеров
источник

D

Dima in pro.jvm
Переслано от Dima
одним из таких хаков является open-in-view, который сразу должен отключен перед выкаткой в прод
источник

D

Dima in pro.jvm
Переслано от Dima
из всего выше сказанного следует, что мы должны забрать данные из JPA-сущности в конце транзакции и передать дальше контроллерам - для этого и нужен DTO + mapper.
источник

D

Dima in pro.jvm
Переслано от Dima
Если вы отдадите JPA-сущность в слой контроллеров после завершения транзакции, вы получите на дефолтных настройках LazyInitializateException
источник

D

Dima in pro.jvm
Переслано от Dima
сервер будет 500-ками плеваться
источник