【问题标题】:Difference between Transfer objects and Domain objectsTransfer对象和Domain对象的区别
【发布时间】:2011-10-07 14:37:20
【问题描述】:

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

【问题讨论】:

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


    【解决方案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 可以有数据聚合、变换、组合以满足表示或一些数据处理的需要,它没有主体,但域对象有基于其领域级别定义的主体

      【讨论】:

      • 这是否为上述答案增加了任何价值?
      猜你喜欢
      • 2010-12-17
      • 2012-04-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-03-25
      • 2011-07-13
      • 2014-09-06
      相关资源
      最近更新 更多