MapStruct - czy tego się używa?

MapStruct - czy tego się używa?
Julian_
  • Rejestracja:około 8 lat
  • Ostatnio:ponad 4 lata
  • Postów:1703
0

W ogóle czy DTO jest OK? bo na stack overflol kłócą się niektórzy, że to anty pattern...
Dla mnie to DTO to jest jakas patologia, żeby przepisywać po 20 razy to samo.

AK
  • Rejestracja:prawie 7 lat
  • Ostatnio:około miesiąc
  • Postów:3561
1

problem ze wzorcami jest taki, że przestały być wzorcami (spostrzeżeniem, że czasem tak robimy i warto to nazwać, np łączenie desek na jaskółcze pióro - wzorzec stolarzy - ale nie wszystkie deski we wszechświecie są na pióro) a stały się religią


Bo C to najlepszy język, każdy uczeń ci to powie
edytowany 1x, ostatnio: AnyKtokolwiek
OtoKamil
  • Rejestracja:ponad 10 lat
  • Ostatnio:około rok
  • Postów:143
1

W kilku projektach korzystałem z MapStructa i sprawdzał się całkiem dobrze (możesz go spiąć ze springiem i konwerter jest dostępny jako bean). Inny team też sobie to wdrożył i nie słyszałem żeby gdzieś z nim utknęli czy na coś narzekali.
Jeśli korzystasz ze Springa i nie chcesz się bawić z DTO to możesz też **wypychać ** encję przez RESTa + dorobić do tego projekcję (interfejs z getterami dla pól jakich wymagasz w odpowiedzi) i nie musisz się bać że zwrócisz dane których nie powinieneś. Masz wybór, ale jeśli chodzi o przyjmowanie danych to jakieś DTO i tak pewnie będziesz musiał sobie zbudować (chyba, że masz zamiar pakować dane bezpośrednio do pojo swojej encji ;) ) + jakąś translację DTO->encja, więc taki MS jest po prostu wygodny (ale nikt nie broni Ci pisać ich ręcznie)

edytowany 2x, ostatnio: OtoKamil
Shalom
  • Rejestracja:ponad 21 lat
  • Ostatnio:około 3 lata
  • Lokalizacja:Space: the final frontier
  • Postów:26433
2
  1. MapStruct to rak. Ktoś kiedyś wrzucił to do projektu w pracy i więcej z tym problemów niż pożytku
  2. Co od samych DTO to nie bardzo rozumiem o co pytasz. DTO na zasadzie struktury danych którą wypychasz sobie przez RESTa albo przyjmujesz z RESTa są ok. Antywzorcem jest co najwyżej źonglowanie takimi strukturami danych później w warstwie logiki aplikacji, zamiast przepisać to na jakieś obiekty domenowe. Bo potem robi sie z tego takie klasyczne programowanie strukturalne gdzie masz "klasy" które są tylko namespace dla funkcji (często pod przykrywką serwisu) i osobno masz dane.

"Nie brookliński most, ale przemienić w jasny, nowy dzień najsmutniejszą noc - to jest dopiero coś!"
OtoKamil
Jakie mieliście z nim problemy?
Shalom
Takie że to się nadaje tylko do przepisywania identycznych DTO na identyczne DTO. Jak w gre wchodzi jakakolwiek "logika" takiego mapowania to prościej napisać to ręcznie ;]
OtoKamil
Nie bardzo rozumiem dlaczego wg Ciebie prościej to napisać ręcznie. W interfejsie możesz stworzyć defaultową metodę, która przyjmie potrzebne dane do wyliczenia czegoś dla danego pola, a reszta nadal się zmapuje automatycznie
M6
  • Rejestracja:ponad 8 lat
  • Ostatnio:około 4 lata
  • Lokalizacja:Beskid Śląski
  • Postów:14
1

Z moich doświadczeń raczej można sobie odpuścić. Proste przypadki typu mapowanie pól (najlepiej identycznie nazwanych) 1 do 1 załatwia może i szybko. Jednak jeśli tylko w grę wchodzi jakaś minimalna logika, to mapstruct potrafi być bardzo uciążliwy i człowiek dochodzi do wniosku, że szybciej by to wszystko napisał z ręki. No i absolutnym hitem jest opcja expression=java(tutaj wpisz kod java jako string), zwłaszcza, gdy ktoś w projekcie faktycznie postanowi jej użyć :)

edytowany 2x, ostatnio: MW600
OtoKamil
jeśli tylko w grę wchodzi jakaś minimalna logika, to mapstruct potrafi być bardzo uciążliwy i człowiek dochodzi do wniosku, że szybciej by to wszystko napisał z ręki - ale przecież możesz użyć defaultowej metody, napisać sobie z palca i podać jej nazwę jako wartość qualifiedByName w adnotacji @Mapping
M6
Tak, wiem, to jest jeszcze jako tako znośne. Ale o ile pamiętam kończysz w sytuacji, gdy część kodu mappera masz w interfejsie / klasie abstrakcyjnej, a część kodu w wygenerowanej implementacji. Oczywiście, można z tym żyć, ale moim zdaniem to niepotrzebna komplikacja.
danek
  • Rejestracja:ponad 10 lat
  • Ostatnio:7 miesięcy
  • Lokalizacja:Poznań
  • Postów:797
2

DTO przydają się przy przesyłaniu danych między modułami, które nie powinny znać swoich wnętrz nawzajem.


Spring? Ja tam wole mieć kontrole nad kodem ᕙ(ꔢ)ᕗ
Haste - mała biblioteka do testów z czasem.
KamilAdam
  • Rejestracja:ponad 6 lat
  • Ostatnio:2 dni
  • Lokalizacja:Silesia/Marki
  • Postów:5505
2

Używa się


Mama called me disappointment, Papa called me fat
Każdego eksperta można zastąpić backendowcem który ma się douczyć po godzinach. Tak zostałem ekspertem AI, Neo4j i Nest.js . Przez mianowanie
PI
Długo się zastanawiałeś nad odpowiedzią xddd
KamilAdam
Bo wcześniej nie używałem :D

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.