• .NET自动化对象映射


    • 对象自动映射工具是用来解决对象之间映射转换的类库,能很好地解决DTO和Model之间的相互映射赋值问题。

    • 只要两个对象的属性具有相同名字(或者符合它规定的命名约定),对象自动映射工具就可以替我们自动在两个对象间进行属性值的映射。

     ==========  原创作品    作者:未闻    出处:博客园·布道阁  ==========

    一、知识点

    1. 为什么需要自动化对象映射?

    因为项目开发经常遇到的两大核心问题:如何提高效率、如何提升质量。

    2. 它可以做什么?

    通过快速实现类对象间的映射(主要解决DTO与模型间的赋值转换)问题,减少编码,从而提高开发效率。

    3. 主流技术方案

    二、具体实现(选取最丰富的AutoMapper、最精简的TinyMapper作为示例)

     1. AutoMapper

    • 下载Nuget包
    • AutoMapper是基于约定映射的,因此在应用之前需要先调用绑定
    • Mapper.Initialize(cfg =>
      {
          cfg.CreateMap<Source, Destination>();
      });
    • AutoMapper提供两种静态方法可以进行对象映射
    • // 新建映射对象
      var dest = Mapper.Map<Destination>(src);
      
      //为已存在的对象赋值:
      Mapper.Map(src, dest);
    • AutoMapper提供自定义的映射方式
    • cfg.CreateMap<Source, Destination>()
          .ForMember(dest => dest.PropertyDest, opt => opt.MapFrom(src => src.PropertySrc));

    2. TinyMapper

    • 下载Nuget包
    • TinyMapper基于约定映射,因此在应用之前需要先调用绑定
    • TinyMapper.Bind<Source, Destination>();
    • TinyMapper提供两种静态方法可以进行对象映射
    • //新建映射对象:
      var dest = TinyMapper.Map<Destination>(src);
      
      //为已存在的对象赋值:
      TinyMapper.Map(src, dest);
    • TinyMapper提供自定义的映射方式
    • TinyMapper.Bind<Source, Destination>(cfg =>
      {
          cfg.Ignore(src => src.Property);
          cfg.Bind(src => src.PropertySrc, dest => dest.PropertyDest);
      });

    3. 用法比较

    * Add方法

    * Edit方法

     * Get方法

    4. 性能对比

      AutoMapper TinyMapper
    组件版本 9.0.0 3.0.2-beta
    组件大小 268KB 53KB
    最后更新时间 2019.08.12 2018.06.07
    使用方式 静态方法、依赖注入 静态方法
    自定义映射 支持、功能强大、灵活 支持
    列表对象映射 支持 支持,需额外映射
    性能(ms) Add 32.75 2.34
    Edit 19.93 1.63
    Get 10.62 1.13
    Pager(100) 103.54 146.22
    Pager(5000) 233.18 147.94

    三、总结

    1. 通过上面的示例可以看到,使用自动化对象映射工具,比手工映射的代码量要少非常多,对系统开发而言,减少的工作量是非常可观的,可以大大加快开发效率。

    2. 性能上,手工映射 > TinyMapper > AutoMapper,所以在局部复杂的映射上可以采用手工映射。

    四、参考资料

  • 相关阅读:
    开源搜索引擎Solr的快速搭建及集成到企业门户最佳实施方案--转载
    Java开发WebService的几种方法--转载
    HBase Java简单示例--转载
    Eclipse快捷键大全--转载
    Java中List、Set和Map的区别--转载
    ArrayList和Iterator的用法
    日期格式化
    java中的值传递和引用传递问题
    Servlet,过滤器,监听器,拦截器的区别
    Java过滤器与SpringMVC拦截器之间的关系与区别
  • 原文地址:https://www.cnblogs.com/yokeqi/p/11967038.html
Copyright © 2020-2023  润新知