一、前言

 DTO(Data Transfer Object)数据传输对象,注意关键字“数据”两个字,并不是对象传输对象(Object Transfer Object),所以只是传输数据,并不包含领域业务处理,虽然用途只是传输数据,但本身其实也是对象,完成与领域对象之间的转换,就像上面说的值对象一样,某种意义上DTO可以看做是值对象的集合,只不过是和领域对象之间的映射,不包含任何的业务逻辑。

  为什么要使用DTO?主要原因是隔离Domain Model,使改动领域模型而不影响UI,还有就是保持领域模型的安全,不暴露业务逻辑。还有就是在分布式模式下,不同的场景使用相同的数据结构有不同的 需求,而我们又不得不做一些数据转化,这是很繁琐的,如果我们在项目初期,做DTO的分析,这样我们就会省很多的事,而且还不会影响整个项目的业务流程, 也方便以后对项目进行扩展。

二、实例代码

先使用Nuget程序包添加AutoMapper引用

1.创建实体对象

    public class User
    {
        public int UserID;
        public string UserName;
        public string Sex;
        public string Address;

    }

2.创建UI的DTO实体对象

    public class UserDTO
    {
        public int ID;
        public string Name;
        public string Sex;
        public string Address;
        public string Remark;
    }

3.调用实例,记住用法就可以了

    class Program
    {
        static void Main(string[] args)
        {
            //初始化实体对象
            User user = ,UserName="小柯",Sex="男",Address="aaabbbccc"};
            //配置AutoMapper
            //因为UserDTO和User类中一些字段名字没有对应上,可以初始映射属性
            Mapper.Initialize(i =>
            {
                i.CreateMap<User, UserDTO>()//创建映射
                    .ForMember(uDTO => uDTO.ID, u => u.MapFrom(a => a.UserID))
                          .ForMember(uDTO => uDTO.Name, u => u.MapFrom(a => a.UserName))
                            .ForMember(uDTO => uDTO.Address, u => u.MapFrom(a => a.Address.ToUpper()))  //将字母转成大写再赋值给DTO
                               .ForMember(uDTO => uDTO.Remark, u => u.Ignore());  //User类中没有Remark,而UserDTO中存在,使用Ignore()忽视该属性,string类型默认为null了
            });

            //调用映射方法返回DTO数据传输对象
            UserDTO userDTO = Mapper.Map<User, UserDTO>(user);

        }
    }

结果:

参考资料:

http://www.cnblogs.com/xishuai/p/3691787.html

DTO学习系列之AutoMapper(一)的更多相关文章

  1. DTO学习系列之AutoMapper(四)

    本篇目录: Mapping Inheritance-映射继承 Queryable Extensions (LINQ)-扩展查询表达式 Configuration-配置 Conditional Mapp ...

  2. DTO学习系列之AutoMapper(三)

    本篇目录: Custom Type Converters-自定义类型转换器 Custom Value Resolvers-自定义值解析器 Null Substitution-空值替换 Containe ...

  3. DTO学习系列之AutoMapper(六)----EntityFramework和AutoMapper的婚后生活

    写在前面 我到底是什么? 越界的可怕 做好自己 后记 文章标题主要关键字:mapping DTOs to Entities,注意并不是“Entities to DTOs”,表示实体对象到DTO的转换, ...

  4. DTO学习系列之AutoMapper(五)----当EntityFramework爱上AutoMapper

    有时候相识即是一种缘分,相爱也不需要太多的理由,一个眼神足矣,当EntityFramework遇上AutoMapper,就是如此,恋爱虽易,相处不易. 在DDD(领域驱动设计)中,使用AutoMapp ...

  5. DTO学习系列之AutoMapper(二)

    本篇目录: Flattening-复杂到简单 Projection-简单到复杂 Configuration Validation-配置验证 Lists and Array-集合和数组 Nested m ...

  6. ABP架构学习系列一 整体项目结构及目录

    本系列是基于aspnetboilerplate-0.8.4.0版本写的,其中原因是由于较高的版本太抽象难以理解和分析,对于还菜菜的我要花更多的时间去学习. abp的源码分析学习主要来源于 HK Zha ...

  7. Dubbo学习系列之九(Shiro+JWT权限管理)

    村长让小王给村里各系统来一套SSO方案做整合,隔壁的陈家村流行使用Session+认证中心方法,但小王想尝试点新鲜的,于是想到了JWT方案,那JWT是啥呢?JavaWebToken简称JWT,就是一个 ...

  8. Dubbo学习系列之十五(Seata分布式事务方案TCC模式)

    上篇的续集. 工具: Idea201902/JDK11/Gradle5.6.2/Mysql8.0.11/Lombok0.27/Postman7.5.0/SpringBoot2.1.9/Nacos1.1 ...

  9. 分布式学习系列【dubbo入门实践】

    分布式学习系列[dubbo入门实践] dubbo架构 组成部分:provider,consumer,registry,monitor: provider,consumer注册,订阅类似于消息队列的注册 ...

随机推荐

  1. 使用自定义类型做qmap,qhash的key

    map在STL中的定义 template <class Key, class T, class Compare = less<Key>, class Alloc = alloc> ...

  2. twemproxy 安装

    twemproxy 安装 1. 获取安装包 shell> wget http://ftp.gnu.org/gnu/autoconf/autoconf-2.69.tar.gz shell> ...

  3. 一个Hadoop难以查找的错误

    This script is Deprecated. Instead use start-dfs.sh and start-yarn.sh Starting namenodes on [Master1 ...

  4. [算法]分治算法(Divide and Conquer)

    转载请注明:http://www.cnblogs.com/StartoverX/p/4575744.html 分治算法 在计算机科学中,分治法是建基于多项分支递归的一种很重要的算法范式.字面上的解释是 ...

  5. python比较两个列表

    两个列表,随机产生4个不相等的数,计算一下,相同位置上的元素相等的个数,用k1表示. b列表中的元素在a列表中,但位置不相同,有多少个,用k2表示. 例如: a=[0, 4, 7, 3]b=[7, 1 ...

  6. SQL语句中的乘号

    在ADO中,我们需要在SQL语句中使用乘法运算,可是添加'*'以后执行程序总是会出错,这是因为‘*’与sql中的‘*’关键字重合了,所以编译会出错. 解决办法:将乘法运算放到sql语句外面,将结果放入 ...

  7. 红帽(Red Hat Linux)下SVN服务器的安装与配置

    转:http://www.cnblogs.com/xd502djj/archive/2011/01/21/1941404.html 第一章 安装 1. 采用源文件编译安装.源文件共两个,为:subve ...

  8. Feedly订阅Blog部落格RSS网摘 - Blog透视镜

    网络信息爆炸的时代,如何更有效率地阅读文章,订阅RSS网摘,可以快速地浏览文章标题,当对某些文章有兴趣时,才点下连结连到原网站,阅读更详细的文章,Feedly Reader阅读器除了提供在线版订阅RS ...

  9. SSH登陆错误 WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED!

    今天遇到问题,删除文件即搞定!! ~~~~~~~~~~~~~~ SSH登陆错误 WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED!   Connectio ...

  10. ASM-51 宏汇编使用手册

    A51与ASM51基本相同   ASM-51 宏汇编主要用来开发Inter8051系列单片机,它具有宏处理,数据处理,列表处理和条件处理等多种功能.源程序的编写完全采用 Inter标准助记符和行格式. ...