'); })();

# 对象映射的概念

将一个对象的数据根据特定规则批量映射到另一个对象中,减少手工操作和降低人为出错率。如将 DTO 对象映射到 Entity 实体中,反之亦然。

silky框架使用AutoMapper (opens new window)包作为对象映射工具。

后期,silky框架也准备扩展使用Mapster (opens new window)包作为对象映射工具。

# 用法

# 使用AutoMapper作为映射工具

  1. 在在启动模块(StartUpModule)中,显式的依赖AutoMapperModule模块。

    如果启动模块指定的是NormHostModule,那么,该模块已经指定依赖AutoMapperModule模块。

  2. 通过继承Profile基类,在其构造器中指定目的的类型映射关系。

例如:

    public class AccountProfile : Profile
    {
        public AccountProfile()
        {
            CreateMap<CreateAccountInput, Domain.Accounts.Account>();
            CreateMap<Domain.Accounts.Account, GetAccountOutput>();
            CreateMap<UpdateAccountInput, Domain.Accounts.Account>().AfterMap((src, dest) =>
            {
                dest.UpdateTime = DateTime.Now;
                dest.UpdateBy = NullSession.Instance.UserId;
            });
        }
    }
1
2
3
4
5
6
7
8
9
10
11
12
13
  1. 通过MapTo方法实现对象属性映射
public async Task<GetAccountOutput> Create(CreateAccountInput input)
{
   // 输入类型对象映射为实体
   var account = input.MapTo<Domain.Accounts.Account>();
   account = await _accountDomainService.Create(account);
   // 实体对象映射为输出对象   
   return account.MapTo<GetAccountOutput>();
}
1
2
3
4
5
6
7
8
public async void Update(UpdateAccountInput input)
{
   var account = await GetAccountById(input.Id);
   account = input.MapTo(account); //通过输入对象更新实体属性
}
1
2
3
4
5