Transfer对象和Domain对象之间的区别

tes*_*dtv 32 java architecture data-transfer-objects domain-object

能否用简单的术语解释Transfer对象和Domain对象之间的区别?如果你能给出一个Java例子,那就太棒了..

Boz*_*zho 50

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

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

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

  • 不会。域对象与任何持久性没有特定关系。简而言之,它们是确保运行应用程序所需的业务逻辑的部分。在大多数情况下,您可以而且应该在不考虑持久性的情况下创建应用程序。例如,一开始就使用内存中的对象和伪造的存储库。 (3认同)

Adr*_*n K 18

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

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

域对象(DO)(以及从中派生它们的类)实现业务逻辑,因此它们仅位于业务逻辑层/域中(即使术语不同,基本含义也是相同的).

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

关于DTO的另一点

根据Martin Fowler的观点,DTO是几个对象的组合(每个对象都是大多数人通常称之为DTO的对象); 理由是,在不那么频繁地发送较大数据包的情况下,成本较低(而不是"聊天"并且不断地通过线路发送许多小包).

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


Oh *_*oon 5

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

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