数据传输对象是否与Value Object相同?

Gau*_*rav 10 java design-patterns web-applications data-transfer-objects value-objects

数据传输对象与值对象相同还是不同?如果它们不同,那么我们应该在哪里使用DTO?我们应该在哪里使用VO?

我们谈论的编程语言是Java,上下文是 - 有一个Web应用程序,它从数据库中获取数据然后处理它,最终处理后的信息显示在前端

Jua*_*nZe 10

值对象是一个简单对象,其相等性不基于标识.数据传输对象是用于在软件应用程序子系统之间传输数据的对象,通常在业务层和UI之间.它只关注普通数据,因此它没有任何行为.

  • 您能否举例说明“谁的平等不是基于身份”? (4认同)
  • 我可以想象这句话意味着 VO 不必直接映射到域实体,而不是映射到它的某些字段或它的不同“图片”。通常VO被理解为与DTO相同,但DTO更多地基于“字段组合”(来自不同域类的一些字段)。DTO 示例可以是 CustomerAddress 类和 Customer 类中的字段之间的组合,以将其提供给表示层。 (3认同)
  • @Gaurav 两个值对象在具有相同值时相等,但不一定是同一个对象...... (2认同)

Nat*_*hes 9

数据传输对象是用于将一堆数据从一层或一层移动到另一层的拼凑物,目标是通过将一堆内容打包到同一数据结构中并将其一起发送来最大程度地减少来回调用的数量。有些人也使用它,就像Michael 在他的帖子中指出的那样,这样一层使用的类就不会暴露给调用它的层。当我将 DTO 称为拼凑时,我的意思是没有实现精确的抽象概念,它是帮助应用程序层之间通信的实用解决方法。

值对象是我们只对其值感兴趣的东西,例如货币金额、日期范围或查找表中的代码。它没有身份,这意味着如果您有多个它们,您将不会担心跟踪哪个是哪个,因为它们本身并不是事物。

将值对象与系统中具有唯一标识的事物(称为实体)进行对比。如果您有一个跟踪客户付款的系统,则客户和付款都是实体,因为它们代表特定的事物,但付款的金额只是一个值,它本身并不存在,就您的系统而言。某事物与您的系统的关系决定了它是值对象还是实体。


Mic*_*ael 6

如果您不想将实际的域对象发送到服务的客户端,请在服务的边界使用 DTO - 这有助于减少客户端和服务之间的依赖关系。

值对象只是其相等性不基于身份的对象,例如 java.lang.Integer

DTO 和值对象实际上并不是彼此的替代品。