将DTO对象深入集成在代码中是一种好习惯吗?

时间:2010-06-18 23:11:52

标签: oop dto

我正在构建一个相当大的应用程序,它利用DAO / DTO设计模式从数据库中获取数据。在应用程序中,特定的DTO已成为“核心数据结构”,因为它在整个项目中都被引用。我想知道在整个项目中如何深入整合这个DTO是一个好习惯,还是我应该有一些转换层,我将DTO转换为非DTO对象?

我可以看到支持和反对此转换层的原因。例如,如果我们确实有转换层,那么:1)DTO的剧烈变化可能会导致整个项目出错,因此转换层会将错误隔离到代码中的单个点。 2)我能够在核心数据结构中添加额外的逻辑,这些逻辑无法添加到DTO,因为它是自动生成的。

但是我也看到了转换层的缺点:1)每当DTO发生变化时,DTO转换代码必须保持一致。这增加了程序员必须注意的另一个步骤,因此更容易出错。 2)这也导致代码重复,因为在大多数情况下,您正在复制DTO的访问者。

最佳路线是什么? DTO每个地方还是转换层?任何人都可以指导我朝着正确的方向前进吗?

2 个答案:

答案 0 :(得分:1)

我认为该名称会泄露意图:数据传输对象。数据传输。

DTO背后的想法是,您可以使用它们将您在域模型之外发送的数据封装到另一个层。你没有暴露你的逻辑,你只是发送一些数据。

如果您的域对象是DTO,则要么将域逻辑暴露在域模型之外,要么将域逻辑保留在域对象以外的其他位置。或两者兼而有之。

我一直在进行让他们分开的项目,我一直在进行一项混合他们的项目。我真的不能推荐混合它们。您的图层开始混合,就像扎染一样。

答案 1 :(得分:0)

我认为DTO是反模式的东西,是EJB 1.0持久性如此繁琐以至于DTO必须减少网络流量时的遗留物。

现在我想说创建模型对象并在晚上睡觉。如果可以,不要担心DTO,让它们变成不可变的。

为了架构纯度而进行的翻译浪费了CPU周期而没有提供太多价值。