Dywagacje nt. Mapstera

Dywagacje nt. Mapstera
T3
  • Rejestracja: dni
  • Ostatnio: dni
0

W innym wątku uświadomiono mi, że używam starożytnej biblioteki do mapowania obiektów - AutoMapper. No i muszę chyba przyznać rację, bo robię to z przyzwyczajenia prawie od pierwszego wydania.
Najlepszą alternatywą wydaje mi się Mapster. Poniższe wywołanie bez żadnych konfiguracji działa nawet lepiej z typami generycznymi jak AutoMapper z konfiguracjami...

Kopiuj
var destObject = sourceObject.Adapt<Destination>();

Używając AutoMappera na ogół tworzyłem konfigurację, uruchamiałem przed startem aplikacji i używałem statycznego wywołania Mapper.Map. Ale z tego co teraz widzę w obydwu bibliotekach można korzystać DI IMapper. Pytanie do czego to się może przydać w przypadku Mapstera?

JE
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 10
2

Najlepsza alternatywą jest nieużywanie tego typu mapperów.

https://cezarypiatek.github.io/post/why-i-dont-use-automapper/

W innym wątku @somekind uświadamiał Cię, ze DTO powinny być proste i bez żadnych zależności. Sama "starożytność" biblioteki nie była tutaj głównym problemem.

D1
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 39
0

Potwierdzam, te biblioteki do mapowania to przeżytek. Szkoda czasu, lepiej samemu napisać mapowanie i nie użerać się z dziwnym API (te wszystkie resolvery, convertery) i brakiem type safety. Zresztą pewnie AI jest to w stanie robić już. Nawet poświęcając tę jedną minutę na napisanie mapowania ręcznie wyjdziesz na tym lepiej.

T3
  • Rejestracja: dni
  • Ostatnio: dni
0

Pytanie było jednak trochę inne...

cerrato
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Poznań
  • Postów: 9011
6

Pytanie było jednak trochę inne...
[...]
Przyzwyczajaj się do takich odpowiedzi. Tutaj tak jest cały czas. Mimo wszystko koledzy mają rację ✌️

Z jednej strony macie racje i te odpowiedzi są lekko offtopic'owe i nie dotyczą bezpośrednio zadanego pytania, ale z drugiej strony - ktoś zadaje pytanie bo ma problem, a porada w stylu "robisz to źle, wybierz inne narzędzie" jest też bardzo cenna.
To jakby ktoś napisał, że zawsze wbijał gwoździe wiadrem, ale teraz mu się zrobiła dziura w dnie i prosi o poradę, jakie wiaderko dobrze jest kupić.
Z jednej strony - pytanie dotyczy pomocy z wyborem odpowiedniego wiaderka, ale z drugiej - dobrze jest uświadomić pytającego, że jednak lepiej się wbija gwoździe młotkiem ;)

T3
  • Rejestracja: dni
  • Ostatnio: dni
0
Jeffdot napisał(a):

Najlepsza alternatywą jest nieużywanie tego typu mapperów.

https://cezarypiatek.github.io/post/why-i-dont-use-automapper/

W innym wątku @somekind uświadamiał Cię, ze DTO powinny być proste i bez żadnych zależności. Sama "starożytność" biblioteki nie była tutaj głównym problemem.

Sam autor nie neguje za bardzo, że mapper może się sprawdzić w prostych projektach a to co obecnie robię, tylko zwraca dane z bazy do odczytu.
Nigdzie nie twierdziłem, że DTO mają być złożone. Tamten przykład nie był mój i służył do ilustracji innego pytania. Sam tam stwierdziłem, że użycie DI IMapper mnie zaniepokoiło. Ja używałem Automappera w kilku projektach po prostu rejestrując konfiguracje przed startem aplikacji. Nauczyłem się tego narzędzia kilkanaście lat temu i za bardzo się nie interesowałem jego rozwojem. Stąd było moje pytanie, do czego może się przydać DI IMapper?

cerrato napisał(a):

To jakby ktoś napisał, że zawsze wbijał gwoździe wiadrem, ale teraz mu się zrobiła dziura w dnie i prosi o poradę, jakie wiaderko dobrze jest kupić.
Z jednej strony - pytanie dotyczy pomocy z wyborem odpowiedniego wiaderka, ale z drugiej - dobrze jest uświadomić pytającego, że jednak lepiej się wbija gwoździe młotkiem ;)

Nigdzie nie pisałem, że zawsze tego używam. Stosuje to kiedy wyczuje, że może mi się przydać. Nie porównywałbym wiaderka do młotka w tej kwestii.
Ale jak jesteśmy przy wiaderkach, to załóżmy że tradycyjnym podejściem było wyciąganie ręcznie małym wiaderkiem wody ze studni. Podejście z mapperem było by użycie wiadra kilka razy większego połączonego z silnikiem elektrycznym, który może być zawodny a i potrzebuje energii, przy tym wiadro z racji swojej wielkości jest bardzo nieporęczne i podatne na uszkodzenia, a gdy wody w studni jest mało to mniejsze wiaderko sobie poradzi w większe nie.

somekind
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Wrocław
3
dev123 napisał(a):

Potwierdzam, te biblioteki do mapowania to przeżytek. Szkoda czasu, lepiej samemu napisać mapowanie

No nie wiem czy lepiej. Programowanie nie powinno chyba polegać na robieniu tego, co za człowieka może zrobić komputer.

To jest narzędzie do mapowania: https://github.com/riok/mapperly

Mamy Roslyna, mamy możliwość generowania kodu, nie ma po co tracić czas na rozwiązania oparte na refleksji, które zawsze będą wolniejsze w działaniu, i zawsze będą rzucały wyjątkiem w runtime zamiast błędem kompilacji.

tryhp3 napisał(a):

Używając AutoMappera na ogół tworzyłem konfigurację, uruchamiałem przed startem aplikacji i używałem statycznego wywołania Mapper.Map. Ale z tego co teraz widzę w obydwu bibliotekach można korzystać DI IMapper. Pytanie do czego to się może przydać w przypadku Mapstera?

Pewnie, żeby móc sobie gdzieś takiego mappera wstrzyknąć. Albo nawet żeby do testów wstrzyknąć mocka takiego mappera. :D

D1
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 39
0

Niby tak, ale jakoś raczej łatwiej i szybciej jest customizować ręczne mapowanie w porównaniu z np.

Kopiuj
[MapProperty([nameof(Car.Make), nameof(Car.Make.Id)], nameof(CarDto.MakeId))]
partial CarDto Map(Car car);

Nie mówiąc już o bardziej złożonych mapowaniach.

somekind
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Wrocław
1

No ok, czasami będzie tak szybciej.
Wszystko zależy od tego, ile takich mapowań masz do zrobienia, i jak bardzo różnią się od siebie obiekty źródłowe i docelowe.

Kod, który napiszesz jest kosztem, i czymś, co trzeba będzie utrzymywać w przyszłości. Lepiej tego unikać.

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.