数据传输对象的作用

Posted minrh

tags:

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

  在DDD领域驱动开发中会用到数据传输对象(Data Transfer Objects),下面是对数据传输对象作用的总结

1、抽象领域层  

  在展现层中数据传输对象对领域对象进行了有效的抽象。这样你的层(layers)将
被恰当的隔离开来。甚至当你想要完全替换展现层时,你还可以继续使用已经存在的
应用层和领域层。反之,你可以重写领域层,修改数据库结构,实体和 ORM 框架,
但并不需要对展现层做任何修改,只要你的应用层没有发生改变。

2、数据隐藏

  想象一下,你有一个User实体拥有属性Id, Name, EmailAddress和Password。
如果 UserAppService 的 GetAllUsers()方法的返回值类型为 List<User>。这样任何
人都可以查看所有人的密码,即使你没有将它打印在屏幕上。这不仅仅是安全问题,
这还跟数据隐藏有关。应用服务应只返回展现层所需要的,不多不少刚刚好。

3、序列化&惰性加载  

  当你将数据(对象)返回给展现层时,数据有可能会被序列化。举个例子,在一个
返回 Json 的 MVC 的 Action 中,你的对象需要被序列化成 JSON 并发送给客户端。
直接返回实体给展现层将有可能会出现麻烦。

  几乎所有的 ORM 框架都支持惰性加载。只有当你需要加载实体时它才会被加
载。比如 User 类型引用 Role 类型。当你从数据库获取 User 时,Role 属性并没有
被填充。当你第一次读取 Role 属性时,才会从数据库中加载 Role。所以,当你返回
这样一个实体给展现层时,很容易引起副作用(从数据库中加载)。如果序列化工具
读取实体,它将会递归地读取所有属性,这样你的

总结:以上内容摘抄自:ABP开发指南第二章第二节













以上是关于数据传输对象的作用的主要内容,如果未能解决你的问题,请参考以下文章

实体类作用封装与面向对象思想

javascript数据类型--- 函数对象之作用域和作用域链

JSP数据交互

Vue3:嵌套 JSON 对象数据的显示不起作用

Angular $http.post:无法将带有数据的对象发送到服务器。数据作为字符串起作用,作为对象 - 不是

尝试使用点符号在控制台中记录数据对象但它不起作用,为啥?