AutoMapper作用
- AutoMapper的作用是把一個對象轉(zhuǎn)化為另一個對象爆哑,避免每次都去轉(zhuǎn)化。
- 使用DTO實現(xiàn)表現(xiàn)層與領(lǐng)域Model的解耦,用AutoMapper來實現(xiàn)DTO與領(lǐng)域Model的相互轉(zhuǎn)換
什么是DTO?
DTO(Data Transfer Object)就是數(shù)據(jù)傳輸對象肿仑,說白了就是一個對象,只不過里邊全是數(shù)據(jù)而已碎税。
為什么要用DTO?
- DTO更注重數(shù)據(jù)尤慰,對領(lǐng)域?qū)ο筮M(jìn)行合理封裝,從而不會將領(lǐng)域?qū)ο蟮男袨檫^分暴露給表現(xiàn)層
- DTO是面向UI的需求而設(shè)計的雷蹂,而領(lǐng)域模型是面向業(yè)務(wù)而設(shè)計的伟端。因此DTO更適合于和表現(xiàn)層的交互,通過DTO我們實現(xiàn)了表現(xiàn)層與領(lǐng)域Model之間的解耦匪煌,因此改動領(lǐng)域Model不會影響UI層
- DTO說白了就是數(shù)據(jù)而已责蝠,不包含任何的業(yè)務(wù)邏輯,屬于瘦身型的對象萎庭,使用時可以根據(jù)不同的UI需求進(jìn)行靈活的運(yùn)用
先創(chuàng)建類霜医,在類中實現(xiàn)映射的方法
使用場景
- 對外服務(wù)接口
- UI展現(xiàn)層
- 用戶的輸入輸出
public class Test1 : Profile
{
public Test1()
{
//兩個類型之間的映射
CreateMap<classA, classB>().ReverseMap();
CreateMap<classC, classD>().ReverseMap();
//映射的對象名稱不一樣
CreateMap<AddressDto, Address>().ForMember(d => d.Country, opt => opt.MapFrom(s => s.CountryName));
//或者
CreateMap<AddressDto, Address>().ConstructUsing(cp => new Address
{
CountryName=cp.Country
}).ReverseMap();
}
}
public class Test2 : Profile
{
public Test2()
{
CreateMap<classA1, classB1>().ReverseMap();
CreateMap<classC1, classD1>().ReverseMap();
}
}
在需要的地方進(jìn)行映射就OK了
classA1 info;
Mapper.Map<classB1>(info);
然后創(chuàng)建一個公共類放入所有的需要初始化映射的類
public static class AutoMapperConfig
{
public static void Configure()
{
//進(jìn)行初始化映射
Mapper.Initialize(cfg =>
{
cfg.AddProfile<Profiles.Test1>();
cfg.AddProfile<Profiles.Test2>();
}
}
}
一般可以在程序的啟動項中初始化映射,將所有的創(chuàng)建映射的方法寫在一個類中
protected void Application_Start()
{
//在程序啟動時調(diào)用AutoMapperConfig類
AutoMapperConfig.Configure();
}