1

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

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

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

最好的路线是什么?无处不在的 DTO 还是转换层?那里的任何人都可以指导我正确的方向吗?

4

2 回答 2

1

我认为这个名字会泄露意图:数据传输对象。数据传输。

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

如果您的域对象是 DTO,那么您要么将域逻辑暴露在域模型之外,要么将域逻辑保留在域对象之外的某个位置。或两者。

我一直在从事将它们分开的项目,并且一直在从事将它们混合在一起的项目。我真的不建议混合它们。你的图层开始混合,就像扎染一样。

于 2011-04-22T03:01:32.007 回答
0

我认为 DTO 是一种反模式,是 EJB 1.0 持久性如此繁琐以至于需要 DTO 来减少网络流量时的遗物。

现在我会说创建模型对象并在晚上睡觉。如果可以并且不必担心 DTO,请使它们不可变。

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

于 2010-06-18T23:17:14.393 回答