数据传输对象的作用

  在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开发指南第二章第二节

原文地址:https://www.cnblogs.com/minrh/p/9967018.html

时间: 2024-10-04 06:10:22

数据传输对象的作用的相关文章

ABP应用层——数据传输对象(DTOs)

ABP应用层——数据传输对象(DTOs) 基于DDD的现代ASP.NET开发框架--ABP系列之16.ABP应用层——数据传输对象(DTOs) ABP是“ASP.NET Boilerplate Project (ASP.NET样板项目)”的简称. ABP的官方网站:http://www.aspnetboilerplate.com ABP在Github上的开源项目:https://github.com/aspnetboilerplate 数据传输对象(Data Transfer Objects)用

ABP(现代ASP.NET样板开发框架)系列之16、ABP应用层——数据传输对象(DTOs)

点这里进入ABP系列文章总目录 基于DDD的现代ASP.NET开发框架--ABP系列之16.ABP应用层——数据传输对象(DTOs) ABP是“ASP.NET Boilerplate Project (ASP.NET样板项目)”的简称. ABP的官方网站:http://www.aspnetboilerplate.com ABP在Github上的开源项目:https://github.com/aspnetboilerplate 数据传输对象(Data Transfer Objects)用于应用层和

贫血模型;DTO:数据传输对象(Data Transfer Object);AutoMapper ;Domain Model(领域模型);DDD(领域驱动设计)

====================== 我自己的理解 ========================== 一:  DTO  我自己的理解,就是 比如你有一个类,跟数据库的table表结构一模一样,主键外键什么的都有,但是这个 model类,你返回数据到 UI层的时候,有些数据是不用的,你就得自己new一个新类出来,新的类从旧的类里面拿值,然后给别人用的就是新的类别,有点类似于我们做接口给android手机用一样的,数据库的类和接口用的类,很相似,但是东西少了的很多,这个新的类(缺胳膊断腿

jQuery事件对象的作用

jQuery事件对象的作用 事件中的Event对象容易被初学者忽略掉,可能大多时候初学者不知道怎么去用它,但有些时候它还是非常有用的 一个标准的"click"点击事件 $(elem).on("click",function(event){ event //事件对象 }) 在不同浏览器之间事件对象的获取, 以及事件对象的属性都有差异.jQuery根据 W3C 标准规范了事件对象,所以在jQuery事件回调方法中获取到的事件对象是经过兼容后处理过的一个标准的跨浏览器对象

JSP九大内置对象的作用和用法总结(转)

SP中一共预先定义了9个这样的对象,分别为:request.response.session.application.out.pagecontext.config.page.exception 1.request对象javax.servlet.http.HttpServletRequest request对象代表了客户端的请求信息,主要用于接受通过HTTP协议传送到服务器的数据.(包括头信息.系统信息.请求方式以及请求参数等).request对 象的作用域为一次请求. 当Request对象获取客

应用程序框架实战三十四:数据传输对象(DTO)介绍及各类型实体比较(转)

本文将介绍DDD分层架构中广泛使用的数据传输对象Dto,并且与领域实体Entity,查询实体QueryObject,视图实体ViewModel等几种实体进行比较. 领域实体为何不能一统江湖? 当你阅读我或其它博主提供的示例代码时,会发现几种类型的实体,这几种实体初步看上去区别不大,只是名称不同,特别在这些示例非常简单的情况下更是如此.你可能会疑惑为何要搞得这么复杂,采用一种实体不是更好? 在最理想的情况下,我们只想采用领域实体Entity进行所有的操作. 领域实体是领域层的核心,是业务逻辑的主要

jQuery事件对象的作用(利用冒泡事件优化)

事件中的Event对象容易被初学者忽略掉,可能大多时候初学者不知道怎么去用它,但有些时候它还是非常有用的 一个标准的"click"点击事件 $(elem).on("click",function(event){ event //事件对象 }) 在不同浏览器之间事件对象的获取, 以及事件对象的属性都有差异.jQuery根据 W3C 标准规范了事件对象,所以在jQuery事件回调方法中获取到的事件对象是经过兼容后处理过的一个标准的跨浏览器对象 这里不在千篇一律的说方法的

ABP官方文档翻译 4.3 校验数据传输对象

校验数据传输对象 校验简介 使用数据标注 自定义校验 禁用校验 标准化 校验简介 应用的输入首先应该被校验.输入可以是用户的也可以是其他应用的.在一个web应用中,校验通常实现两次:客户端和服务端.客户端校验是为了用户体验.最好现在客户端校验表单并显示给用户无效的字段.但是,服务端校验要更紧要且不可避免的. 服务端校验一般在应用服务或控制器实现(通常,所有的服务从展示层获得数据).应用服务方法应该先检查(校验)输入再使用.ABP提供了良好的基础设施来自动校验应用的输入: 所有的应用服务方法 所有

【Web API系列教程】3.5 — 实战:处理数据(创建数据传输对象)

现在,我们的Web API暴露数据库实体给客户端,而客户端接收直接映射到你的数据库表的数据.然而,这不永远都是个好办法.有时候你可以想要改变发送到客户端的数据的形式.例如,你可以想要: 1, 移除环形引用(见上一章) 2, 隐藏客户端不应该看到的特定属性 3, 为了减少有效载荷而省略一些属性 4, 拼接包含嵌套的对象图,以使它们对客户端更便利 5, 避免"over-posting"漏洞(查看Model Validation(http://www.asp.net/web-api/over