Projektowanie, Programowanie, Codzienność – BeniaminZaborski.com

16 listopada 2009

O2O Mapping

Filed under: How Can I Take ... — Tagi: , , , — Beniamin Zaborski @ 23:46

Zainspirowany jednym z postów na blogu Macieja Aniserowicza, postanowiłem bliżej przyjrzeć się zagadnieniu mapowania object-to-object. Wydaje się to być idealny lek na „głupie” mapowanie property poprzez przepisywanie każdego po kolei. A i owszem jest. Szczególnie przydatne przy mapowaniu obiektów domeny do obiektów DTO. Nie wiem ilu z Was robi/robiło to właśnie w ten tzw. „głupi” sposób, ale ja muszę przyznać że … mhm. Przykre, jak czasem nie zauważamy tak prostych rozwiązań pozwalających zaoszczędzić sporo czasu i zbędnych linii kodu. AutoMapper bo to o nim właściwie pisał Maciej to porządne narzędzie, które powinno zainteresować każdego programistę .NET. Na pierwszy rzut oka wygląda zachwycająco, ale to chyba bardziej idea tego typu mapowania jest bardziej zachwycająca niż sam w sobie produkt. Narzekam? Nie w sumie to nie. AutoMapper jest ok, ale niektóre rozwiązania w nim mnie nie odpowiadały. Sprawdziłem inne narzędzia tego typu jak choćby Glue i … ja potrzebowałem czegoś naprawdę trywialnego, bo sama idea jest trywialna. Długo nie myśląc stwierdziłem, że te kilka klas to napisze sam w taki sposób, aby mnie odpowiadały w 100%. I stało się – od pomysłu, po implementację. Czego potrzebowałem? Niczego więcej jak mapowania ad-hoc z możliwością zdefiniowania własnych reguł ustawiania wartości właściwości w obiekcie docelowym.
Oto przykład mówiący wszystko za siebie:


User user = new User();
user.Id = Guid.NewGuid();
user.Login = „Jan”;
user.Password = „Secret”;
user.FirstName = „Jan”;
user.LastName = „Kowalski”;
user.RoleName = „Admins”;

var mapper = new ObjectMapper<User, UserDTO>();
mapper
  .AddRule(„FullName”, s => s.FirstName + ” ” + s.LastName)
  .AddRule(„Login”, s => s.Login)
  .AddRule(„Password”, s=>SecurityUtils.Md5(s.Password));
mapper.Ignore(„RoleName”);
UserDTO userDTO = mapper.Map(user);

Kod źródłowy do wglądu zamieszczam tutaj. Tak na marginesie cały pomysł jak i jego implementacja powstała podczas jednego z programów rozrywkowych z tępym żartem granego w pewnej stacji na trzy litery w poniedziałkowe wieczory. A więc jak sądzę wszystko to trwało nie więcej jak 60 minut (z reklamami) – tłumaczę się na zaś jakby jednak coś nie działało;).

Stwórz darmową stronę albo bloga na WordPress.com.