这个问题在这里已经有了答案:
What is a Data Transfer Object (DTO)?
(12 个回答)
9年前关闭。
我已经阅读了很多关于仅在需要时使用模式的信息。我目前正在编写一个非常简单的应用程序,它实现了存储库和服务模式——我现在正在讨论是否使用 DTO 将我的域对象传递给 View 。这是一个单页应用程序。
我开始在我的模型中创建 DTO 类,但仍然无法理解它们提供了什么好处。感觉就像我只是无缘无故地复制一切。
什么时候适合使用 DTO?在什么时候它变得必要或有益?任何示例/样本都会很棒。
最佳答案
I started to create the DTO classes in my model but still can't understand what benefit they provide.
那么在这种情况下,它们很可能不会提供任何好处。坚持最简单的方法总是最好的,因此您可能会尝试不必要地增加复杂性。
我想说,当您只需要传递一些平面数据而不需要复杂的域对象时,DTO 很有用。在我看来,如果可能的话,最好将您的 View 直接绑定(bind)到您的业务对象。如果没有别的,它会提供一个健全性检查,以确保您的业务对象符合您的使用场景。确实,这正是 the CSLA framework 所提倡的方法。 (除其他外)专注于业务对象。
我发现自己将域对象转换为 DTO 的最常见场景是:
我认为关键在于将数据从一种形状转换为另一种形状。如果在服务、 Controller 或 View 中进行大量翻译......那么也许该翻译是一个足够大的组件,值得拥有自己的对象。真的,这都是关于关注点分离的。一个好的经验法则是,如果一段代码“出于某种目的重新塑造数据并实现该目的”,那么这段代码正在做两件事。将其分成两段代码可能会更好。 DTO 是这两者的通信方式。
有一些工具(例如 AutoMapper )可以帮助在志同道合的对象之间翻译大量“脚手架”代码。
关于asp.net-mvc - 何时在 MVC4 应用程序中使用 DTO(数据传输对象)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15148866/