Zastanawiam się gdzie powinna odbywać się konwersja obiektu reprezentującego obiekt w bazie danych (JPA @Entity) na DTO (i odwrotnie). Widzę minimum trzy opcje:
-
serwis do konwertowania @Entity -> DTO. Główny problem jaki tu widzę, że przyrostowo będzie zwiększać się liczba liinii w serwisie.
-
w @Entity metoda
toDto
- wtedy do konwersji DTO -> @Entity musiałaby istnieć osobna klasa do konwersji. Plus na pewno taki, że załatwia to problem np. z dziedziczeniem / polimorfizmem (nie trzeba sprawdzać typu obiektu tylko z automatu można wywołać metodę która zwróci odpowiednie DTO). Problemy: ciężej będzie robić jakieś customowe DTO (abstrachując od założeń RESTa, w przypadku gdy coś byłoby łatwiej/wydajniej zrobić po stronie backendu i zwrócić jakiegoś customowego DTO). -
Osobna klasa dla @Entity -> @DTO i DTO -> @Entity. Z dwoma konstruktorami i dwoma polami: jeden z obiektem @Entity - wtedy DTO byłoby instancjonowane jakąś metodą. Drugi z DTO, wtedy pole z @Entity byłoby instancjonowane wyciągając coś np. z bazy danych.
Osobiście wydaje mi się, że druga lub trzecia opcja byłaby najlepsza. Tylko w trzeciej musiałbym znowu sprawdzać jakiego typu mam obiekt w przypadku gdybym miał w bazie zapisane obiekty kilku typów (wynikających z dziedziczenia).