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

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

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

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

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

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

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

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

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

关于DTO的另一点

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

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

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

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

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