.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性能最高是 ...
随机推荐
- SSH深度历险记(八) 剖析SSH核心原则+Spring依赖注入的三种方式
于java发育.一类程序猿必须依靠类的其他方法,它是通常new依赖类的方法,然后调用类的实例,这样的发展问题new良好的班统一管理的例子.spring提出了依赖注入的思想,即依赖类不由程 ...
- 动态生成Zip
动态生成Zip文档 通过前面一篇烂文的介绍,大伙儿知道,ZipArchive类表示一个zip文档实例,除了用上一篇文章中所列的方法来读写zip文件外,还可以直接通过ZipArchive类,动态生成 ...
- Canvas的quadraticCurveTo 和 bezierCurveTo 画曲线 方法细说
详细代码如下: <!doctype html> <html lang="en"> <head> <script src="htt ...
- oracle connect by 说明
Oracle能够通过START WITH . . . CONNECT BY . . .子句来实现SQL分层查询,这递归查询 例如: select level||'月' 月份 from dual con ...
- Oracle压缩总结2—
估计表压缩效应
使用压缩前,我们可以估算压缩能有多大效果. 11gr2我已经能够使用dbms_comp_advisor,具体代码见附件.只需要运行两个文件dbmscomp.sql和prvtcomp.plb.然后使用D ...
- Intent常用使用汇总
方法一:调用默认的短信程序Intent intent = new Intent(Intent.ACTION_VIEW);intent.setType("vnd.android-dir/mms ...
- MoveWindow and SetWindowPos
转自:http://blog.sina.com.cn/s/blog_82c346de0100u7kq.html MoveWindow and SetWindowPos (2011-09-14 15:5 ...
- CSS+DIV+JQuery实际的视频汇总
在牛腩中学习过CSS和DIV.在JS中学习过CSS+JS 封装,在这里又回想了一遍,也作为查漏补缺,也算比較系统的复习了一遍吧. css核心内容主要包含四个方面:标准流.盒子模型,浮动和定位,而在B/ ...
- aul 学习测试(测量)
-------------------aul5 ----------test0------------------------- select file#,rfile#,name from v$dat ...
- Linq的Distinct太不给力了[转]
假设我们有一个类:Product public class Product { public string Id { get; set; } public string Name { get; set ...