50

您能否简单地解释一下 Transfer 对象和 Domain 对象之间的区别?如果你能举一个Java例子,那就太好了..

4

4 回答 4

65
  • DTO 没有任何逻辑。他们只有字段(状态)。它们用于将数据从一层/子系统传输到另一层/子系统
  • 领域对象可以具有逻辑(取决于您是使用领域驱动设计还是具有贫乏的数据模型),并且它们通常与数据库结构相关。

如果使用贫血数据模型(即您的域对象没有任何逻辑),DTO 和域对象可以是同一个对象。

相关:http ://techblog.bozho.net/?p=427

于 2011-07-18T11:28:18.203 回答
27

数据传输对象 (DTO)用于在应用程序的不同部分(例如不同层)或不同应用程序之间交换数据。

  • DTO 只是一个“愚蠢”的数据结构。
  • 它们用于合同/接口定义 - 这意味着使用这些接口之一的任何组件“知道”这些对象。

领域对象(DO)(及其派生的类)实现业务逻辑,因此它们仅位于业务逻辑层/领域(即使术语不同,本质含义相同)。

因为 DO 实现业务逻辑,它们可能很复杂,并且可能包括方法、事件等。

关于 DTO 的另一点

根据 Martin Fowler 学派,DTO 是多个对象的组合(每个对象都是大多数人通常所说的 DTO);理由是,在某些情况下,不那么频繁地发送较大的数据包会更便宜(而不是“健谈”并不断地通过网络发送许多小包)。

因此,大多数人会将 DTO 视为单个对象,Martin F 说 DTO 只是一个“信封”,其中包含多个离散(可能不相关)的对象。不是一个大问题 IMO - 大多数人认为 DTO 是根据我在这个答案顶部的定义(或接近它的东西)。

于 2011-07-18T11:37:27.777 回答
5

由于其使用的性质,传输对象通常是可序列化的,如果调用是远程的并且在 JVM 之间调用,这一点尤其相关,或者它们将以促进序列化的方式使用,例如有状态会话 bean。为此,传输对象必须易于受到这种“处理”,即传输对象实现可序列化。

域对象可能不会反过来。领域对象可能包含行为,但是 DTO 只是一种传输媒介。

于 2011-07-18T11:41:46.160 回答
-1

业务角度的领域对象,是整个领域和流的活动的参与者或主体,DTO是数据对象,它与忠实反映数据库对象的数据bean不同(尤其是在ORM架构中)DTO可以进行数据聚合, 变换 , 组合 以满足 表示 或 一些 数据 加工 的 需要 , 它 不是 主体 , 但 领域 对象 有 主体 基础 上 的 领域 级 定义

于 2014-11-13T21:30:16.327 回答