Domain driven design 领域驱动设计模式的数据传输对象(DTO)和表示对象之间有什么区别?

Domain driven design 领域驱动设计模式的数据传输对象(DTO)和表示对象之间有什么区别?,domain-driven-design,dto,Domain Driven Design,Dto,我知道DTO由服务器端返回,由客户端接收,但我对DDD中的表示对象感到困惑。我认为它们几乎是一样的。有人能告诉我他们的不同吗 有人能告诉我他们的不同吗 他们在不同的环境中解决不同的问题 数据传输是一个边界问题-我们如何将信息从这里移动到那里(通过远程接口)?您可能会遇到以下问题:信息传输速度慢或成本高。控制这种情况的一种方法是以更大的粒度移动信息 使用数据传输对象的主要原因是将多个远程调用批处理为一个调用--Martin Fowler 换句话说,DTO是您的程序对fat消息的表示 在DDD中,值

我知道DTO由服务器端返回,由客户端接收,但我对DDD中的表示对象感到困惑。我认为它们几乎是一样的。有人能告诉我他们的不同吗

有人能告诉我他们的不同吗

他们在不同的环境中解决不同的问题

数据传输是一个边界问题-我们如何将信息从这里移动到那里(通过远程接口)?您可能会遇到以下问题:信息传输速度慢或成本高。控制这种情况的一种方法是以更大的粒度移动信息

使用数据传输对象的主要原因是将多个远程调用批处理为一个调用--Martin Fowler

换句话说,DTO是您的程序对fat消息的表示

在DDD中,值对象模式是一个建模问题;它用于耦合信息的不变表示和相关计算


DTO看起来像数据结构,其方法可用于将该数据结构转换为可跨边界发送的表示形式(例如:字节数组)

值对象看起来像一个数据结构,其方法可用于计算域中可能感兴趣的其他信息


出于必要,DTO往往更稳定(或至少向后兼容)——因为生产者和消费者彼此距离较远,协调两者的变更需要比单个本地变更更大的努力

相比之下,值对象更容易更改,因为它们是一个域模型问题。如果您想更改模型,这只是一件事,相应地更容易协调

(有一种对冲——对于需要持久性的系统,我们需要某种方法将信息从对象中提取出来,并转换为可以存储和检索的表示形式。这不一定是价值对象的问题,特别是如果您愿意使用通用数据结构将信息移入和移出“模型”。)


在名词王国中,线条可能会变得模糊——部分原因是任何不是通用数据结构/原语的信息都是“对象”,部分原因是您经常可以使用相同的对象来处理内部问题和边界问题