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

时间:2011-07-18 11:21:48

标签: java architecture data-transfer-objects domain-object

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

4 个答案:

答案 0 :(得分:42)

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

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

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

答案 1 :(得分:15)

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

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

域对象(DO)(以及派生它们的类)实现业务逻辑,因此它们只位于业务逻辑层/域中(基本含义相同甚至相同)如果条款不同的话。)

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

关于DTO的另一点

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

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

答案 2 :(得分:3)

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

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

答案 3 :(得分:-2)

在业务透视中的域对象,它是整个域和流的活动的参与者或主体,DTO是与忠实反映数据库对象的数据bean不同的数据对象(特别是在ORM体系结构中) DTO可以进行数据聚合,转换,组合以满足表示或某些数据需求,它不是主题,但Domain对象有基于其域级别定义的主题