Pregled open source .NET projekata: Automapper
Ovo je prvi u nizu, nadam se, brojnih kratkih pregleda open source .NET alata, frameworka, toolkitova, i svega što može poslužiti, korisno ili beskorisno!
Prvi prezentirani alat je Automapper. Radi se jako korisnom frameworku za kopiranje vrijednosti iz jednog objekta u drugi. Osim osnovnog kopiranja propertya po propertya, postoje brojni načini konfiguracije koji omogućuju složene manipulacije nad podacima, a fluent interface DSL način konfiguriranja je intuitivan i relativno jednostavan za podesiti.
Najčešći scenarij u kojemu ja upotrebljavam AutoMapper je kopiranje vrijednosti iz domenskih entiteta (sa učitanim podacima iz baze) u DTO objekte koji reprezentiraju prikaz podataka na web stranici ili windows/Silverlight formi.
Najjednostavniji primjer je kopiranje prema konvenciji, što znači da će Automapper tražiti propertye sa istim imenima:
Public class Article { public int ID { get; set; } public string Name { get; set; } } Public class ArticleDTO { public int ID { get; set; } public string Name { get; set; } } AutoMapper.Mapper.CreateMap<Article , ArticleDTO>(); var article = new Article() {ID = 1, Name = "some name"}; var dto = new ArticleDTO(); AutoMapper.Mapper.Map(article, dto);
Malo složenija i češća upotreba je flattening, ili pretvaranje grafa objekata u jedan objekt, uz primjenu ValueResolvera za konverziju tipa podataka:
public class Person { public string Name { get; set;} public Address Address { get; set; } public bool IsMale { get; set; } } public class Address { public string StreetName { get; set;} public int Number { get; set;} } public class PersonDTO { public string Name { get; set;} public string LivingAddress { get; set;} public string Gender { get; set; } } public class GenderConverter : ValueResolver<bool,string> { protected override string ResolveCore(bool source) { return source ? "Male" : "Female"; } } var person = new Person() { Name = "Hudo", Address = new Address() {StreetName = "Sezam", Number = 1, IsMale=true} }; AutoMapper.Mapper.CreateMap<Person , PersonDTO>() // kopiranje ulice i broja iz objekta Address u jedan property .ForMember( d => d.LivingAddress, s => s.MapFrom(x => x.Address.StreetName + " " + x.Address.Number)) // konverzija iz bool u string .ForMember( d=>d.Gender, s=>s.ResolveUsing<GenderConverter>().FromMember(x=>x.IsMale)); var dto = new PersonDTO(); AutoMapper.Mapper.Map(person, dto);
Ostali primjeri se mogu pronaći na Codeplexu (http://automapper.codeplex.com/) i naravno, Googlu.
Comments
As you get mature, your mens health concerns may very well adjust. Could a alcohol digestive tract lead to health issues?
mens exercises