是什么推动了数据传输对象的设计?

ngm*_*ngm 5 c# web-services dto

我正在写一个网络服务.我也在写一个使用这个Web服务的Web客户端.我经历了尝试通过线路发送域对象的一些痛苦(循环引用,延迟加载等等 - 请参阅Davy Brion的帖子,了解为什么这是一个坏主意).所以,我将使用DTO在这两层之间进行转移.

由于负责两端,我能够控制DTO的设计.现在我想知道,是什么推动了DTO的设计?它是客户端的用户界面吗?我是否根据客户端的视图/屏幕创建DTO?或者服务方面应该规定我发出的DTO合同,而客户必须处理它给出的内容?

Tom*_*ana 3

设计 DTO 可能是一项艰巨的任务,尤其是因为有很多问题需要考虑。通常,性能考虑可能会阻止您完全从 UI 中抽象出来。假设同一个对象有多个 UI 表示,例如树、网格和详细信息窗格。根据您实际显示的内容,它们每个都需要不同的属性子集。您可以设计一个通用的 DTO 来包含所有这些属性的联合,但构建这样的 DTO、从存储中加载数据并通过网络传输数据可能会很昂贵。您可能最终会传输包含大量数据的丰富对象图,只是为了在 UI 中显示对象的名称。

另一方面,如果您为每个 UI 上下文选择一个 DTO,您很快就会遇到类爆炸问题,其中数百个 DTO 代表几乎相同的对象,并且属性子集略有修改。代码的重用和可读性将会受到影响,并且从长远来看可能变得难以管理。

由于没有灵丹妙药,因此需要一种敏感的方法,在性能和其他方面之间找到​​折衷方案,可能每个域对象使用最多 3 种不同的 DTO 类型,并在不同的上下文中重用它们。