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

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

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


答案 1

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


答案 2

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

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

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


推荐