DTO(领域数据传输对象)是做什么的

Posted 来老铁干了这碗代码

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了DTO(领域数据传输对象)是做什么的相关的知识,希望对你有一定的参考价值。

一、DTO的产生及优点


最初,我们设计程序的时候直接创建实体类,然后再创建一个封装返回值的jsonObject类,进行业务处理的时候直接利用实体类传递数据,然后封装在jsonObject类里面返回,这样的话就存在以下几个问题:

(1)暴露数据库表结构

如果黑客通过前端的json对象解析出来了你的表结构,然后就可以结合表结构和请求命令模拟发送攻击请求窃取你的信息。

(2)后台处理僵硬

比方说我要根据用户名查询这个用户是否存在,同时还要根据用户名、订单时间、订单状态等等好多信息查询该用户的特定订单。这个时候如果只有一个实体类,那么查询用户存在与否就需要额外注入好多信息,相反,如果我们有DTO类则可以有选择的进行属性值复制与查询。

(3)前后台解耦

有了DTO类就可以让DTO类跟前端显示界面对接,而实体类跟数据库表对接,这样前端更改的时候就不需要更改后端实体类,同样后端需要增加业务逻辑而不改变前端显示的时候也不用更改DTO对象。

二、设计方式


  1. 根据前端显示需求建立DTO类
  2. 根据数据库表建立实体类
  3. 创建数据传输工具类(假设从from类将属性赋值到to类中)

在这个类里面,可以通过反射获取DTO类和实体类的方法,然后遍历查找from对象getter方法的返回值和to对象setter方法参数相同的方法,回调from类的get方法获取属性值,然后将此属性值通过回调函数赋值给to对象。

三、应用场景


主要用于远程调用等需要大量传输对象的地方。
比如我们一张表有100个字段,那么对应的PO就有100个属性。
但是我们界面上只要显示10个字段,
客户端用WEB service来获取数据,没有必要把整个PO对象传递到客户端,
这时我们就可以用只有这10个属性的DTO来传递结果到客户端,这样也不会暴露服务端表结构.到达客户端以后,如果用这个对象来对应界面显示,那此时它的身份就转为VO

简单来说:用户界面端——>VO——>DTO——>DO——>数据库

以上是关于DTO(领域数据传输对象)是做什么的的主要内容,如果未能解决你的问题,请参考以下文章

我们为什么需要DTO(数据传输对象)

让AutoMapper在你的项目里飞一会儿(转)

领域驱动设计中层之间的数据传输对象

Dto数据传输对象

让AutoMapper在你的项目里飞一会儿(转)

DTO DAO POCO BO