传输对象和域对象之间的区别

您能用简单的术语解释一下传输对象和域对象之间的区别吗?如果你能举一个Java的例子,那就太好了。


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

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

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


答案 2

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

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

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

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

关于 DTO 的另一点

根据Martin Fowler学派的思想,DTO是几个对象的组合(每个对象都是大多数人通常称之为DTO的);其基本原理是,在某些情况下,降低发送较大数据包的频率会降低(而不是“健谈”并不断通过线路发送许多小包)。

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


推荐