我已经阅读了很多关于仅在需要时使用模式的信息。我目前正在编写一个非常简单的应用程序,它实现了存储库和服务模式——我现在正在讨论是否使用 DTO 将我的域对象传递给视图。这是一个单页应用程序。
我开始在我的模型中创建 DTO 类,但仍然无法理解它们提供了什么好处。感觉就像我只是无缘无故地复制一切。
什么时候适合使用 DTO?在什么时候它变得必要或有益?任何示例/样本都会很棒。
我已经阅读了很多关于仅在需要时使用模式的信息。我目前正在编写一个非常简单的应用程序,它实现了存储库和服务模式——我现在正在讨论是否使用 DTO 将我的域对象传递给视图。这是一个单页应用程序。
我开始在我的模型中创建 DTO 类,但仍然无法理解它们提供了什么好处。感觉就像我只是无缘无故地复制一切。
什么时候适合使用 DTO?在什么时候它变得必要或有益?任何示例/样本都会很棒。
我开始在我的模型中创建 DTO 类,但仍然无法理解它们提供了什么好处。
那么在这种情况下,它们很可能不会提供任何好处。坚持最简单的方法总是最好的,因此您可能会尝试不必要地增加复杂性。
我想说,当您只需要传递一些平面数据而不需要复杂的域对象时,DTO 很有用。在我看来,如果可能的话,最好将您的视图直接绑定到您的业务对象。如果没有别的,它会提供一个健全性检查,以确保您的业务对象符合您的使用场景。事实上,这是CSLA 框架(以及其他)所倡导的方法,它专注于业务对象。
我发现自己将域对象转换为 DTO 的最常见场景是:
我认为关键在于将数据从一种形状转换为另一种形状。如果在服务、控制器或视图中进行大量翻译......那么也许该翻译是一个足够大的组件,值得拥有自己的对象。真的,这都是关于关注点分离的。一个好的经验法则是,如果一段代码“出于某种目的重新塑造数据并实现该目的”,那么这段代码正在做两件事。将其分成两段代码可能会更好。DTO 是这两者的通信方式。
有一些工具(例如AutoMapper)可以帮助在志同道合的对象之间转换大量“脚手架”代码。