DTO学习系列之AutoMapper(一)

一、前言

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

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

二、实例代码

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

DTO学习系列之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);

        }
    }

结果:

DTO学习系列之AutoMapper(一)

参考资料:

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

上一篇:时延、时延带宽积、RTT和利用率


下一篇:Vue中$event的用法