zoukankan      html  css  js  c++  java
  • .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,所以在局部复杂的映射上可以采用手工映射。

    四、参考资料

  • 相关阅读:
    linux JAVA JDK环境配置
    逍遥语录
    php常用函数集
    使用uGUI系统玩转标准俄罗斯方块
    Unity3D中uGUI事件系统简述及使用方法总结
    JAVA笔记-如何将百万级数据高效的导出到Excel表单
    简单的异步Socket实现——SimpleSocket_V1.1
    Netty4.x中文教程系列(六) 从头开始Bootstrap
    Unity3D中简单的C#异步Socket实现
    基于Spring框架的简单多数据源切换解决办法
  • 原文地址:https://www.cnblogs.com/yokeqi/p/11967038.html
Copyright © 2011-2022 走看看