首页 新闻 赞助 找找看

请教下关于DTO层的使用

0
悬赏园豆:100 [已解决问题] 解决于 2015-12-21 12:02

最近想研究下DTO层的作用,基本的用处和用法都掌握了
但是搞不明白具体要怎么用。。


我看了一些资料说用ORM会把DO和PO整合在一起,所以不用单独手动建立,然后在大部分情况下DTO也可以作为VO用,所以也不一定有必要再为UI层建立一个VO直接用DTO即可。


问题:
1.比如说UI层需要展示一个用户列表,这个用户列表不显示密码属性,所以DTO可以不添加密码属性,这是查询用。但是如果要创建用,我查了下也不建议再额外增加一个DTO,而是建立一个万用的DTO,查询的时候不返回密码,创建的时候可以用。那这个要怎么建立?我只能想到在查询的时候手动给密码属性赋空值,这样前台也接收不到密码,但是依然会附带一个Password的属性名过去。。这个时候该怎么处理这个问题呢?


2.DTO的作用之一是避免实体类结构暴露出去,避免用户绕过Service层直接操作,虽然这句话我不太理解但是听人说DTO层的属性名和实体类的属性名要不一样,那在做映射转换的时候,比如我用AutoMapper,要为每一个需要映射转换的属性加一句
map.ForMember(d => d.Country, opt => opt.MapFrom(s => s.CountryName));
是不是太麻烦了?

星辰Mapley的主页 星辰Mapley | 初学一级 | 园豆:114
提问于:2015-12-19 18:59
< >
分享
最佳答案
0

为啥没人回答你呢,因为这么说吧,你觉得麻烦的事情,当项目达到很大很大的程度的时候,那就一点儿都不麻烦了。

比如有的项目单是需求分析就是几千万。然后这些人写了书或是博客,你就当做至宝,这就是问题所在了。

分层你可以看成一家公司,你三个人的公司,却要去学习人家三十万人公司的做法,三十个前台,找总经理必须预约,

开张销售单据必须有八个人签名。

这个就是回答你的第二个问题。

 

第一个问题,有关密码的或者安全性的,如果确实不知道如何简单的不带密码返回MODEL,那么使用一个VIEWMODEL或者DTO,也是可以的。

之所以要分ViewModel/Model,是项目大到一定程度的时候,分比不分好。

至于DTO,你看看名字他是Data Transfer Object,因为有的ORM的Entity是无法进行Transfer的,或者说是无法序列化的,那么在远程调用的时候只好通过DTO进行。如果ORM的Entity本身是支持序列化的,

那么你在服务器端和客户端要牺牲CPU计算能力进行DTO<-->Entity之间进行Mapping操作,这个也是等你脱离温饱问题再考虑的事情。什么时候其他方面的考虑高于麻烦的时候,那么DTO,MAPPING啥的就用上了。

 

你不用看到一个技术,就非得用上他不可,关键要理解这个技术的使用背景。

收获园豆:100
爱编程的大叔 | 高人七级 |园豆:30839 | 2015-12-21 11:36
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册