Do czego służą dto? Wcześniej myślałem, że dto służą do tego, żeby:
- Encje nie miały żadnej logiki, oprócz getterów i setterów, a każdą inną logikę jak (najprostszy przykład który mi przyszedł do głowy) obliczanie pola figury, czy sprawdzanie czy użytkownik jest pełnoletni przenieść do dto. Tzn pobieramy Encję z bazy danych, konwertujemy do dto, wykonujemy operacje, konwertujemy do Encji i zapisujemy znów do bazy danych - jeśli potrzeba.
- Przenosić obiekty między warstwami: Załóżmy, że mamy sytuację gdzie w Encji mamy jakąś relację bidirectional, gdybyśmy chcieli takiego Jsona sparsować do Pojo/Entity musielibyśmy oadnotować odpowiednio pola (np @JsonManagedReference, @JsonBackReference)
Ale na stackoverflow ktoś napisał, że jest to antywzorzec gdyż jest to "krok wstecz" w OO, mowa o punkcie pierwszym - utrudniona jest walidacja i (wg mnie) trochę ciężej jest o rozbudowę kodu ponieważ trzeba "dbać" zarówno jak o Encję tak i o DTO. Krócej mówiąc: punkt pierwszy jest niepoprawny, punkt drugi - może być. W angielskiej wikipedii jest napisane, że DTO różni się od Entity tym, że DTO nie ma żadnej logiki oprócz getterów i setterów, czyli inaczej niż w pkt 1.
Wydaje mi się, że dao służą do tego co repozytoria tak? Z tym, że Repozytoria są "nowocześniejsze" i przyjemniejsze w użyciu (nie trzeba samemu transkacji tworzyć itd).