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

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

有帮助吗?

解决方案

值对象是一个简单的对象,其相等性不基于身份。 数据传输对象是用于在软件应用程序子系统之间(通常在业务层和UI之间)传输数据的对象。它只针对纯数据,因此没有任何行为。

其他提示

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

values对象只是其等式不基于身份的对象,例如java.lang.Integer

DTO和值对象并不是真正的彼此替代。

数据传输对象是一种将一堆数据从一层或一层移动到另一层或另一层的方法,其目的是通过将一堆东西打包到相同的数据结构中并进行发送来最大程度地减少来回调用的次数。一起。有些人也使用它,例如 Michael在这里的帖子中指出,这样就不会暴露一层使用的类到调用它的层。当我将DTO视为麻烦时,我的意思是没有实现一个精确的抽象概念,这是帮助应用程序层之间进行通信的实用变通方法。

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

对比度值对象是在系统中确实具有唯一标识的事物,称为实体。如果您有一个系统来跟踪进行付款的客户,那么该客户和付款是实体,因为它们代表特定的事物,但是付款上的货币金额只是一个值,它本身并不存在,就您的系统而言。事物与系统的关系决定了它是价值对象还是实体。

它们是不同的,但是我过去甚至互换使用了这两个,这是错误的。我读到第一版《核心J2EE模式》一书中的DTO(数据传输对象)被称为VO(值对象),但找不到该参考。

DTO,有时也称为“哑传输对象”,以帮助我记住它是一个容器,不应使用任何业务逻辑来在层和层之间传输数据。只是应该是一个具有getters / setters属性的对象。

但是,VO类似于JAVA枚举,它表示固定的一组数据。VO没有对象身份(内存中对象实例的地址),它由其值标识并且是不可变的。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top