Transfer对象和Domain对象的区别
Posted
技术标签:
【中文标题】Transfer对象和Domain对象的区别【英文标题】:Difference between Transfer objects and Domain objects 【发布时间】:2011-10-07 14:37:20 【问题描述】:能否请您简单解释一下传输对象和域对象之间的区别?如果你能举一个 Java 的例子,那就太好了..
【问题讨论】:
【参考方案1】: DTO 没有任何逻辑。他们只有字段(状态)。在将数据从一个层/子系统传输到另一个层时使用它们 域对象可以具有逻辑(取决于您是使用域驱动设计还是具有贫乏的数据模型),它们通常与数据库结构相关。如果使用贫血数据模型(即您的域对象没有任何逻辑),DTO 和域对象可以是同一个对象。
相关:http://techblog.bozho.net/?p=427
【讨论】:
没有。域对象与任何持久性都没有特定关系。简而言之,它们是确保运行应用程序所需的业务逻辑的部分。在大多数情况下,您可以并且应该在不考虑持久性的情况下创建您的应用程序。例如,在开始时使用内存中的对象和伪造的 repos。【参考方案2】:数据传输对象 (DTO) 用于在应用程序的不同部分(例如不同层)或不同应用程序之间交换数据。
DTO 只是一个“愚蠢”的数据结构。 它们用于合同/接口定义 - 这意味着使用这些接口之一的任何组件都“知道”这些对象。Domain Objects (DO)(及其派生的类)实现业务逻辑,因此它们只位于业务逻辑层/领域(本质含义相同,甚至如果条款不同)。
由于 DO 实现业务逻辑,它们可能很复杂,可能包括方法、事件等。
关于 DTO 的另一点
根据 Martin Fowler 学派的思想,DTO 是多个对象的组合(每个对象都是大多数人通常所说的 DTO);理由是,在某些情况下,不那么频繁地发送较大的数据包会更便宜(而不是“健谈”并不断地通过网络发送许多小包)。
因此,大多数人会将 DTO 视为单个对象 Martin F 说 DTO 只是一个“信封”,其中包含 几个 离散(并且可能不相关)对象。不是一个大问题 IMO - 大多数人认为 DTO 是根据我在这个答案顶部的定义(或接近它的东西)。
【讨论】:
感谢您的回复。这是否意味着 DTO 主要用于表示层,而 DO 仅用于后端? 不,DTO 不限于表示层。 +1 dto 通常跨层使用,但不限于此。【参考方案3】:由于其使用的性质,传输对象通常是可序列化的,如果调用是远程的并且在 JVM 之间调用,这一点尤其相关,或者它们将以促进序列化的方式使用,例如有状态会话 bean。为此,转移对象必须易于受到这种“处理”,即传输对象实现可序列化。
域对象不能反过来说。领域对象可能包含行为,但 DTO 只是一种传输媒介。
【讨论】:
【参考方案4】:业务角度的领域对象,它是整个领域和流的活动的参与者或主体,DTO是数据对象,它与忠实反映数据库对象的数据bean不同(尤其是在ORM架构中) DTO 可以有数据聚合、变换、组合以满足表示或一些数据处理的需要,它没有主体,但域对象有基于其领域级别定义的主体
【讨论】:
这是否为上述答案增加了任何价值?以上是关于Transfer对象和Domain对象的区别的主要内容,如果未能解决你的问题,请参考以下文章
POJO,JAVABEAN,Entity,domain,DTO,ejb区别
style transfer/domain adaption简介
迁移学习及领域自适应 Transfer Learning & Domain Adaptation
迁移学习及领域自适应 Transfer Learning & Domain Adaptation