zoukankan      html  css  js  c++  java
  • AutoMapper使用

    AutoMapper作用
    • AutoMapper的作用是把一个对象转化为另一个对象,避免每次都去转化。
    • 使用DTO实现表现层与领域Model的解耦,用AutoMapper来实现DTO与领域Model的相互转换
    什么是DTO?

    DTO(Data Transfer Object)就是数据传输对象,说白了就是一个对象,只不过里边全是数据而已。

    为什么要用DTO?
    1. DTO更注重数据,对领域对象进行合理封装,从而不会将领域对象的行为过分暴露给表现层
    2. DTO是面向UI的需求而设计的,而领域模型是面向业务而设计的。因此DTO更适合于和表现层的交互,通过DTO我们实现了表现层与领域Model之间的解耦,因此改动领域Model不会影响UI层
    3. DTO说白了就是数据而已,不包含任何的业务逻辑,属于瘦身型的对象,使用时可以根据不同的UI需求进行灵活的运用
      先创建类,在类中实现映射的方法
    使用场景
    • 对外服务接口
    • UI展现层
    • 用户的输入输出
    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();
        }
    }
    在需要的地方进行映射就OK了
    classA1 info;
    
    Mapper.Map<classB1>(info);

    然后创建一个公共类放入所有的需要初始化映射的类

    public static class AutoMapperConfig
    {
        public static void Configure()
        {
            //进行初始化映射
            Mapper.Initialize(cfg =>
            {
                cfg.AddProfile<Profiles.Test1>();
                cfg.AddProfile<Profiles.Test2>();
            }
        }
    }

    一般可以在程序的启动项中初始化映射,将所有的创建映射的方法写在一个类中

    protected void Application_Start()
    {
        //在程序启动时调用AutoMapperConfig类
        AutoMapperConfig.Configure();
    }

    作者:高调的小丑
    链接:https://www.jianshu.com/p/64358b3cb467
    来源:简书

  • 相关阅读:
    第11组 团队Git现场编程实战
    团队项目-需求分析报告
    团队项目-选题报告
    第10组 Alpha事后诸葛亮
    第10组 Alpha冲刺(6/6)
    第10组 Alpha冲刺(5/6)
    第10组 Alpha冲刺(4/6)
    第10组 Alpha冲刺(3/6)
    第10组 Alpha冲刺(2/6)
    第10组 Alpha冲刺(1/6)
  • 原文地址:https://www.cnblogs.com/djd66/p/11408260.html
Copyright © 2011-2022 走看看