Automapper – przepisywanie danych

Automapper – dlaczego i kiedy stosować tę bibliotekę?

Automapper jest bardzo interesującą biblioteką. Może ona służyć do “przepisywania” danych (object-object). Warto skorzystać z niej jeżeli potrzebujemy przenieść dane np. z jednej klasy do drugiej gdy ich propercje są zbliżone ale posiadają inne typy. Przypisywanie ręczne nie jest dobrą techniką ponieważ może nastarczyć nam wielu problemów. Jeżeli chcemy aby nasz kod był solidny i czytelny polecam przede wszystkim skorzystanie z automapper-a. Biblioteka ta jest bardzo łatwa i przyjemna w użyciu – postaram się zobrazować ją na przykładzie.

Przykład i implementacja

Otwieramy NugetPackages następnie ściągamy Automappera i instalujemy go. Jest to darmowa biblioteka.

Dodawanie nuget-u

Automapper nuget

Dodajemy przestrzeń nazw do naszego programu aby móc korzystać z tej biblioteki.

Zaimplementujmy dwie proste i podobne do siebie klasy. Z encji OldUser “przeniesiemy” dane do Users – zwróćmy uwagę iż pole “wiek” ma inny typ, a nazwy pól są identyczne.

Wpiszmy więc jakieś dane do klasy OldUser.

Następnie tworzymy konfiguracje mapowania z klasami które będą “przepisywane” (z OldUser do Users).

Kod odpowiedzialny za przepisywanie danych :

Pierwsza linijka ostrzega nas przed błędami i w razie jakiegokolwiek błędu z konfigurowaniem mapowania wyrzuci nam wyjątek AutoMapperConfigurationException. W następnych linijkach tworzymy mapę.

W argumencie metody Map() podajemy dane, które chcemy przepisać. Automapper jest na tyle inteligenty że sam wyszukuje nazwy naszych propercji i wiąże je po tej samej nazwie.

automapper przepisywanie danych

Jak możemy zauważyć powyżej – automapper zadziałał.

Co się stanie, jeżeli chcemy przepisać dane ale nasze encje nie będą posiadały identycznych nazw? Tu przychodzi z pomocą metoda ForMember().

Nazwę pola “FirstName” zmieniamy na “FullName”  ponieważ chcemy, aby pole to zawierało informacje o imieniu i nazwisku. Następnie usuwamy propercję “Surname” dlatego, że nie będziemy powielać informacji skoro będzie znajdować się już w jednym polu.

Nasz klasa Users wygląda aktualnie tak:

Zatem zmieniamy nasz kod aby dane z pól FirstName i Surname zapisywał do pola FullName.

Kod z “configiem”

Zmieniamy na

Informuje nas iż dane z Surname i FirstName ma zapisać do pola FullName z klasy Users.

Jeżeli chcemy aby np. pole wiek z jakiegoś powodu było pomijane/ignorowane przy przepisywaniu danych wówczas dodajemy metodę ignore w konfiguracji.

 

Uważam że ta biblioteka jest warta uwagi. Nie jest ona wcale skomplikowana, a może poprawić czytelność naszego kodu i wyeliminować niepotrzebne błędy przy ręcznym przepisywaniu danych (bleh..).
Na przykład – w logice biznesowej implementujemy DTO i na niego rzutujemy dany model. Wtedy po stronie logiki obsługujemy wszystko a w kontrolerze mamy parę linijek kodu.
Omówiłem tutaj podstawową funkcjonalność automapper-a ma ona więcej funkcjonalności.

Zachęcam do zapoznania się z dokumentacja TUTAJ

 

 

Dodatek – cały kod

 

6 Comments on “Automapper – przepisywanie danych”

  1. Automapper to bardzo fajna biblioteka. Dwie uwagi – tak na przyszłość 🙂 – :

    – klasa Users powinna się nazywać User
    – obydwie klasy powinny zawierać propertiesy nazwane po angielsku (a już na pewno nie mixup angielskiego z polskim)

        1. Powinno raczej być UserMapper aby było wiadomo że chodzi o tworzenie mapy z konfiguracją do klasy “User” ale słuszna uwaga.

Leave a Reply

Your email address will not be published. Required fields are marked *