.NET的DTO映射工具AutoMapper
原文:https://github.com/AutoMapper/AutoMapper/wiki/Getting-started
参考:http://www.infoq.com/cn/news/2010/02/automapper-rtw/
说明:这是一款DTO的映射工具,如果你不了解DTO,可能会不理解它到底有什么意义。
概述:
AutoMapper是基于对象到对象约定的映射工具,它可以把复杂的对象模型转为DTO,或者其他的--那些让设计更合理更适于序列化、通信、传递消息的简单对象或者干脆就只是在领域层与应用层之间搭建一个简单的ACL防护层(就像DTO一样,用于代码的显示转换)来增加各自层的相互独立性。
一般用于ViewModel模式和跨服务范畴。
AutoMapper包含以下功能:
- Flattening
- Projection
- Configuration Validation
- Lists and Arrays
- Nested Mappings
- Custom Type Converters
- Custom Value Resolvers
- Custom Value Formatters
- Null Substitution
- Containers
- Mapping Inheritance
简介:
AutoMapper是什么?
AutoMapper是一个将对象映射到对象的映射工具。对象映射的工作机制是:通过输入一个类型的对象然后将其转换成另一个不同类型的对象并输出。在这里AutoMapper要做的(所擅长的)就是提供一些方便的方法,把那些麻烦累人的工作(指对象转换)从类型转换算法中剔除掉。只要需要转换的类型遵循了AutoMapper制定的规则,那么你基本上就不用再写配置算法来实现两个类型之间转换的工作了,AutoMapper会替你自动完成。
//原文:把工作从如将类型A转换成类型B的映射算法中剔除,如果类型B遵循了AutoMapper制定的规则,那么你基本上就可以以零配置来实现两个类型之间转换的工作了。( What makes AutoMapper interesting is that itprovides some interesting conventions to take the dirty work out of figuringout how to map type A to type B.)
为什么使用AutoMapper?
写类型转换的映射代码实在一件枯燥的事情,而对映射做测试则更乏味。AutoMapper为类型转换提供了非常简单的配置算法,同样也易于测试。
现在一个现实的问题是,“为什么使用对象到对象的映射?”
类似于‘映射转换’这样的情况将会发生在项目中非常多的地方,尽管大部分只会发生在层与层之间的边界,例如表示层与领域层之间,或者服务层与领域层之间。如果层与层之间有相关联的话,那么一层的变化会影响到另一层,因此,对象到对象的映射可以隔离这些层的模型,让每一层的变的更加独立,每一层的变化只会影响到自身。
怎样使用AutoMapper?
首先,你需要一个源数据对象和一个目的数据对象。在设计目的数据对象时,会受到它所在层的影响(即在转换对象时你需要getXXX,setXXX一堆方法),但是对于AutoMapper而言,它最大的优势就是只要你在设计目的数据对象时,让其中的成员(按一定规则)去匹配源数据对象成员的命名方法,那么这些问题就能很好解决。
例如:一个源数据对象中有一个属性叫:“FirstName”,那么它就会自动映射到目的数据中另一个叫“FirstName”的属性。
也就是说,你只需要有两个对象,然后引用AutoMapper,那么你将能轻松的创建对象之间的映射
比如:
- Mapper.CreateMap<Order,OrderDto>();
CreateMap方法类型左边的是源数据,右边的是目的数据,在执行完这条映射语句后,就可以使用Map方法了。
- OrderDtodto = Mapper.Map<Order, OrderDto>(order);
AutoMapper也有非泛型的方法,不过对于那些情况,你可能不好判断编译时的类型。
AutoMapper该在什么地方配置?
如果你使用静态的映射方法,配置时只需要在appDomain中配置一次,这意味着你最好的选择就是把配置代码方法在程序启动项中,例如Global.asax。需要说明的是,在bootstrapper(启动加载器)内配置自己,这个bootstrapper也被称作为启动方法。
如何测试一个映射?
创建一个映射测试,你要做两件事
· 调用启动项中创建映射的方法
· 调用Mapper.AssertConfigurationIsValid方法
就像这个例子一样
- AutoMapperConfiguration.Configure();
- Mapper.AssertConfigurationIsValid();
.NET的DTO映射工具AutoMapper的更多相关文章
- .NET的对象映射工具AutoMapper使用笔记
AutoMapper是一个.NET的对象映射工具. 项目地址:https://github.com/AutoMapper/AutoMapper. 帮助文档:https://github.com/Aut ...
- 对象映射工具AutoMapper介绍
AutoMapper是用来解决对象之间映射转换的类库.对于我们开发人员来说,写对象之间互相转换的代码是一件极其浪费生命的事情,AutoMapper能够帮助我们节省不少时间. 一. AutoMapper ...
- EF架构~AutoMapper对象映射工具简化了实体赋值的过程
回到目录 AutoMapper是一个.NET的对象映射工具,一般地,我们进行面向服务的开发时,都会涉及到DTO的概念,即数据传输对象,而为了减少系统的负载,一般我们不会把整个表的字段作为传输的数据,而 ...
- .NET之AutoMapper对象映射工具运用
AutoMapper对象映射工具:主要是将某一个实体转成另一个实体. 1.引用NuGet包;搜索:AutoMapper 2.创建实体类 using System; using System.Colle ...
- .NET Core Dto映射(AutoMapper)
.Net Core Dto映射(AutoMapper) 我们假设一个场景, 采用EF Core+Web Api, 这时候可能会出现EF Core中的Entity Model和在项目中使用的Model之 ...
- EmitMapper自动映射工具
在实体与DTO之间,我们一般都需要进行映射.如果手动的来进行转换,实在是太麻烦.所以就产生了很多映射工具,比如AutoMapper,EmitMapper.而经过一些对比,EmitMa ...
- 推荐一个 Java 实体映射工具 MapStruct
声明: 1.DO(业务实体对象),DTO(数据传输对象). 2.我的代码中用到了 Lombok ,不了解的可以自行了解一下,了解的忽略这条就好. 在一个成熟的工程中,尤其是现在的分布式系统中,应用与应 ...
- FreeSql (二十二)Dto 映射查询
适合喜欢使用 dto 的朋友,很多时候 entity 与 dto 属性名相同,属性数据又不完全一致. 有的人先查回所有字段数据,再使用 AutoMapper 映射. 我们的功能是先映射,再只查询映射好 ...
- MapStruct 映射工具
# MapStruct 映射工具 本篇主要讲解MapStruct 一款映射工具,只需简单的定义一个Mapper接口,在编译期间,MapStruct将生成此接口的实现,据说MapStruct性能最高是 ...
随机推荐
- ubuntu-14.04 系统安装mysql-5.6.21
1.安装mysql前准备工作 (1).从官网下载mysql-5.6.21.tar.gz (2).tar -zxvf mysql-5.6.21-tar.gz 会生成mysql-5.6.21的目录 ...
- IQ调制、整形滤波器与星座映射
http://www.cnblogs.com/touchblue/archive/2013/01/15/2861952.html 现代通信中.IQ调制基本上属于是标准配置,由于利用IQ调制能够做出全部 ...
- top使用命令
top命令 第一行和uptime命令一样,都有系统的负载. 10:36:19 当前时间 up 1day .7min 系统执行时间.格式为天 时:分 1 user 当前登录用户数 load averag ...
- linux sdio card睡眠治疗 sdio card removed解决方案
近期调试几款sdio card suspend时都会出现sdio card removed,之后 要么死机要么模块不能正常工作.根本原因也就是休眠没有处理好.昨天最终找到了 解决方法. 1:host端 ...
- document.all使用
document.all 一个. document.all它是在页面中的所有元素的集合.例如: document.all(0)一个元素 二. document.all能够推断浏览器是否是IE ...
- SQL Server 备份和还原
SQL Server 备份和还原 SQL Server 备份 恢复模式 SQL Server 数据恢复模式分为三种:完整恢复模式.大容量日志恢复模式.简单恢复模式. 完整恢复模式 默认的恢复模式, ...
- python 导入库问题
最终解决如下面:我不知道有没有多余的空间 from django.conf import settings from sys import path path.extend(['/home/zoues ...
- 解决Gradle minifyEnabled无法找到错误
Android studio最新版0.9支持proguard minify,shrinkResources ,尝试了下,提示找不到minifyEnabled方法 Error:(29, 0) Gradl ...
- (两)unity4.6Ugui中国教程文档-------总结-UGUI Canvas
大家好,我是广东太阳. 转载请注明出处:http://write.blog.csdn.net/postedit/38922399 更全的内容请看我的游戏蛮牛地址:http://www.unitym ...
- 使用linux服务logrotate文件tomcat日志文件
使用notepad++编辑本地文件 tomcat: /usr/tomcat/logs/catalina.out { copytruncate daily dateext nocompress miss ...