【发布时间】:2020-10-06 04:32:56
【问题描述】:
我知道 DTO 由服务器端返回并由客户端接收,但我对 DDD 中的表示对象感到困惑。我认为它们几乎相同。谁能告诉我他们的区别?
【问题讨论】:
我知道 DTO 由服务器端返回并由客户端接收,但我对 DDD 中的表示对象感到困惑。我认为它们几乎相同。谁能告诉我他们的区别?
【问题讨论】:
谁能告诉我他们的区别?
他们在不同的情况下解决不同的问题
数据传输是一个边界问题——我们如何将信息从这里移动到那里(通过远程接口)?您可能遇到的问题包括:信息传输速度慢或成本高。控制这种情况的一种方法是以更大的粒度移动信息。
使用数据传输对象的主要原因是将多个远程调用集中到一个调用中 -- Martin Fowler,Patterns of Enterprise Application Architecture
换句话说,DTO 是您的程序对胖消息的表示。
在 DDD 中,值对象模式是一个建模问题;它用于耦合信息的不可变表示和相关计算。
DTO 看起来像一个数据结构,具有可用于将该数据结构转换为可跨边界发送的表示形式(例如:字节数组)的方法。
值对象往往看起来像一个数据结构,其方法可用于计算您的域中可能感兴趣的其他信息。
出于必要,DTO 往往更稳定(或至少向后兼容)——因为生产者和消费者彼此远离,协调对两者的更改比单个本地更改需要更多的努力。
相比之下,值对象更容易更改,因为它们是领域模型的关注点。如果你想改变模型,那只是一件事,并且相应地更容易协调。
(有一种对冲——对于需要持久性的系统,我们需要某种方法将信息从对象中获取到可以存储和检索的表示中。这不一定是值对象问题,特别是如果你是愿意使用通用数据结构将信息移入和移出“模型”。)
在名词王国中,界限可能会变得模糊 - 部分原因是任何不是通用数据结构/基元的信息都是“对象”,部分原因是您经常可以使用相同的对象来避免您的内部顾虑和边界问题。
【讨论】: