当使用在MVC4应用的DTO(数据传输对象)? [重复](When to use DTOs (D

2019-08-17 06:00发布

这个问题已经在这里有一个答案:

  • 什么是数据传输对象? 6个回答

我读过很多关于使用模式在需要时,才。 我目前正在写一个非常简单的应用程序,实现真实的信息库和服务模式 - 现在我辩论是否要我的域对象传递给使用DTO的视图。 这是一个单页的应用程序。

我开始创建我的模型的DTO类,但仍然无法理解他们提供什么样的好处。 这感觉就像我刚才复制的一切没有任何理由。

什么时候适合使用的DTO? 在什么时候才有必要或有益? 任何例子/样品将是真棒。

Answer 1:

我开始创建我的模型的DTO类,但仍然无法理解他们提供什么样的好处。

然后,它很可能是在这种情况下,他们不提供好处的情况。 用最简单的方法坚持始终是最好的,所以你可能会试图增加不必要的复杂性。

我要说的是DTO的是有用的,当你只需要通过周围的一些扁平的数据,而无需复杂的域对象。 在我看来,这将是直接绑定你的意见,你的业务对象在可能的情况。 如果不出意外,它提供了一个全面的检查你的业务对象都符合您的使用情景线。 事实上,这是所倡导的方法的CSLA框架,其重点是业务对象(等等)。

在那里我发现自己翻译域对象到DTO的最常见的情况是:

  1. 当我有一个外部服务的抽象依赖(这本身不符合我的内部域对象对齐),我想使服务接口本身很简单。 而不是做业务层中的所有翻译,我有层本身使用的DTO,增进两国之间的转换层。
  2. 当我通过AJAX调用返回序列化对象的JavaScript,不希望我的所有域的额外开销对象通过线路。 保持的JavaScript本身简单,不通过外部网络连接发送不必要的数据,等等。
  3. 当我有一个使用各种域对象的数据的复合体,但不超集它们的图。 在一些情况下,这可能指示该视图表示该优点它自己的域对象(可能是其他对象的复合物,或也许所有参与应该是较小的非聚集型的根对象的复合材料中的对象的,这取决于)一个用例,所以要小心这种情况。 但有时只是让中介DTO使得代码更简单一点,更清洁。

我认为关键是从数据到另一个形状的一个形状,翻译。 如果有很多翻译的服务,或控制器,或视图回事......那么也许,翻译是一个足够大的分量,值得自己的对象。 这是所有关于关注点分离,真的。 一个好的经验法则是,如果一段代码是“重新塑造的数据用于一些目的实现该目的”,那么这段代码是做两件事情。 也许最好分开掰成两段代码。 该DTO是这两个如何沟通。

有工具(如AutoMapper ),它可以有很多的“脚手架”代码帮助志同道合的对象之间的转换。



文章来源: When to use DTOs (Data Transfer Objects) in MVC4 Applications? [duplicate]