Próbowałem wymyślić przepływ podstawowej aplikacji wielowarstwowej i czytałem sprzeczne informacje online. Próbuję ustalić, czy nadal istnieje korzyść z używania obiektów DTO z DAO do warstwy usługi poprzez użycie jakiegoś mapera.
Podstawowy przepływ, który przewiduję, jest następujący:
- Model / formularz interfejsu użytkownika -> Kontroler
- Kontroler konwertuje model na obiekt domeny (encja)
- Obiekt domeny -> Warstwa usługi
- Obiekt Domeny -> DAO
- DAO -> Obiekt (y) domeny
- Usługa -> interfejs użytkownika
- Interfejs użytkownika przekształca domenę w modele interfejsu użytkownika
Gdyby przestrzegano DTO, DAO przekaże DTO, a nie Podmiot. Po przeczytaniu wydaje się, że DTO stał się nieco nieczynny, ponieważ (przynajmniej w Javie) podmioty stały się adnotacjami POJO, co oznacza, że ich pamięć zajęła bardzo mało miejsca.
Czy tak jest, czy też należy używać DTO do całkowitego enkapsulacji obiektów domeny w warstwie DAO, a jeśli tak, to co warstwa usług przeszedłaby do DAO?
Wielkie dzięki!
Jednym z powodów, dla których myślę, że ta dyskusja pojawia się wielokrotnie, jest to, że wydaje się, że poważnym problemem jest zabranie obiektu ze wszystkimi potrzebnymi danymi i przekonwertowanie go na obiekt, który wygląda identycznie lub prawie identycznie jak ten oddajesz.
To prawda, to PITA. Jest jednak kilka powodów (oprócz wymienionych powyżej).
Ale możesz zarządzać nim dość skutecznie, jeśli zamkniesz logikę tłumaczenia w zbiór klas konwerterów
Spójrz na lambdaJ, w którym możesz wykonać konwersję (domainObj, toDto). Jest przeciążenie tego do użytku z kolekcjami. Oto przykład metody kontrolera, która z niej korzysta. Jak widać, nie wygląda tak źle.
źródło