1 Comments

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

Comment by mens exercises

As you get mature, your mens health concerns may very well adjust. Could a alcohol digestive tract lead to health issues?