我最近听到人们说 数据传输的对象 (交互)是一个 反模式.

为什么?什么选择呢?

有帮助吗?

解决方案

有些项目的所有数据都是两次。一旦作为域对象,一次作为数据传输对象。

这种重复成本很高,因此架构需要从这种分离中获得巨大收益才值得。

其他提示

DTO不是反模式。当您通过网络发送一些数据(例如,通过Ajax调用中的网页)时,您希望通过仅发送目标将使用的数据来确保节省带宽。此外,表示层通常可以方便地使数据的格式与本机业务对象略有不同。

我知道这是一个面向Java的问题,但在.NET语言中,匿名类型,序列化和LINQ允许在运行中构建DTO,这减少了使用它们的设置和开销。

也可与检的一个反模式若有可能请提供一个代码3.0 说:

重性质的实体 豆若有可能请提供一个代码规范之前 EJB3.0,导致在使用的 设计图案,如数据传输 对象(也可与检).交互为 轻的对象(其中应该有 已经实体豆自己 第一个地方),用于发送的 数据跨层...现在EJB3.0 规范,使该实体豆模型一样 作为普通的老Java object(组).与 这种新的功模型,则将没有 再需要创建一个也可与检每 实体或一组实体...如果 你想送EJB3.0实体 跨层作出他们只是 实现java。io.Serialiazable

我不认为DTO本身就是一种反模式,但是有一些与使用DTO相关的反模式。 Bill Dudney以DTO爆炸为例:

http://www.softwaresummit.com/2003/speakers/DudneyJ2EEAntiPatterns.pdf

此处提到的DTO也有许多滥用行为:

http:// anirudhvyas.com/root/2008/04/19/abuses-of-dto-pattern-in-java-world/

它们起源于三层系统(通常使用EJB作为技术)作为在层之间传递数据的手段。基于Spring等框架的大多数现代Java系统在单层中使用POJO作为域对象(通常用JPA等注释......)采用另一种简化视图......这里不需要使用DTO。

纯粹主义者会说DTO是反模式的,因为对象变成数据表表示而不是真正的域对象。

有些人认为DTO是一种反模式,因为它们可能存在滥用行为。它们经常在它们不应该/不需要的时候使用。

本文模糊地描述了一些滥用行为。

如果您正在构建分布式系统,那么DTO肯定不是反模式。不是每个人都会在这个意义上发展,但如果你有一个(例如)Open Social应用程序都运行JavaScript。

它会向您的API发布大量数据。然后将其反序列化为某种形式的对象,通常是DTO / Request对象。然后可以对其进行验证,以确保在转换为模型对象之前输入的数据是正确的。

在我看来,它被视为一种反模式,因为它被误用了。如果您不构建分布式系统,则可能不需要它们。

当你的所有域对象加载关联对象时,DTO成为必需品,而不是ANTI-PATTERN。

如果您不制作DTO,则会有从业务层到客户/网络层的不必要转移的对象。

限制此情况的开销,而不是转移DTO。

数据传输对象的目的是存储来自不同来源的数据然后转移它立即进入数据库(或远程门面)。

然而, DTO模式违反了单一责任原则 ,因为DTO不仅存储数据,还将数据传输到数据库/外观。

将数据对象与业务对象分开的需求不是反模式,因为可能需要分离数据库层

您应该使用聚合和存储库模式来代替DTO,这些模式分隔对象集合(聚合)和数据传输(存储库)。

要转移一组对象,您可以使用工作单元模式一组存储库和一个事务上下文;为了在事务中单独转移聚合中的每个对象。

这个问题不应该是"为什么"但是"".

确定它的 反模式时,只有结果的使用,它是更高的成本 -运行时间或维护。我的工作项目上具有数以百计的交互完全相同数据库的实体类。每次你想添加一个单一的领域,你的广告加id像是四次-来也可与检,要实体,转换也可与检域课程或实体,逆的转化,...你忘了一些地方和数据有不一致的。

它的 不抗模式的时候你真正需要的不同表示域课程 -更多平的、更加丰富,更狭窄...

我个人开始域类,并通过它的周围,适当的检查在正确的地方。我可以注释和/或增加某些"辅助"类,使映射数据库,以化格式,如JSON或XML...我总是可以分割的一类的两个如果我觉得有必要。

这是关于你的观点-我喜欢看一个领域对象为单一的对象扮演的各种角色,而不是多个对象创造了对方。如果只有作用的对象已被输送数据,那么也可与检.

我认为,如果您将所有远程对象实现为DTO,那么人们就意味着它可能是一种反模式。 DTO只是一组属性,如果您有大对象,即使您不需要或使用它们,也总是会传输所有属性。在后一种情况下,更喜欢使用代理模式。

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