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