Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Oop 数据传输对象(DTO)的意义是什么?_Oop - Fatal编程技术网

Oop 数据传输对象(DTO)的意义是什么?

Oop 数据传输对象(DTO)的意义是什么?,oop,Oop,当我可以将所有业务类放在类库中,在业务逻辑中使用它们,然后还将这些相同的业务对象传递给边界类时,为什么要使用DTO/Domain对象呢 更新: 这些都是很好的观点,谢谢你的帮助。后续问题: 您通常将这些DTO放在哪里?在域对象旁边,即在同一命名空间中 namespace MedSched.Medical { public class MedicalGroup { //... } public class MedicalGroupDTO {

当我可以将所有业务类放在类库中,在业务逻辑中使用它们,然后还将这些相同的业务对象传递给边界类时,为什么要使用DTO/Domain对象呢

更新: 这些都是很好的观点,谢谢你的帮助。后续问题:

您通常将这些DTO放在哪里?在域对象旁边,即在同一命名空间中

namespace MedSched.Medical
{
    public class MedicalGroup
    {
        //...
    }

    public class MedicalGroupDTO
    {
        //...
    }
}

DTO是数据传输对象,传输是关键。当您希望通过网络传递对象并可能使用不同的语言进行通信时,它们非常有用,因为它们“重量轻”(即没有业务逻辑)

如果您的应用程序不是基于web服务的,DTO就不会真正为您买任何东西


因此,使用或不使用DTO应该根据应用程序的体系结构来决定。

有时,您想要传递的数据不能准确映射到业务对象的结构,在这种情况下,您使用DTO


例如:当您想要传递数据子集或投影时。

我可以想到使用DTO的两种基本场景:

  • 您正在使用不完整且将无法通过验证的数据创建业务对象。例如,您正在解析创建业务对象的CSV文件或Excel文件。如果直接使用这些对象中的数据来创建业务对象,则很可能会使对象中的多个验证规则失败,因为这些文件中的数据容易出错。它们的结构往往与您在最终业务对象中的结构不同:为不完整的数据提供占位符将非常有用

  • 您正在通过带宽密集型介质传输业务对象。如果您使用的是web服务,则需要在传输之前使用DTO简化对象;否则CLR将很难尝试序列化所有数据

      • DTO为您的域模型提供了一个抽象层。因此,您可以更改模型,而不会破坏为您的服务客户签订的合同。这类似于数据库设计中的一种常见做法,其中视图和过程成为底层数据模型的抽象层
      • 序列化—您可能会过度公开数据,并通过网络发送臃肿的消息。这可以通过使用序列化属性来缓解,但您可能仍然有额外的信息
      • 隐式契约与显式契约——通过公开域对象,您可以让客户机来解释它们的用法,因为它们没有完整的模型可供使用。您通常会根据关联的存在或删除隐式地更新域对象,或者盲目地接受所有更改。DTO明确表示服务的使用和所需的操作
      • 断开连接的场景-具有显式消息或DTO将使您更容易实现消息传递和消息传递模式,如MessageBroker等
      • DDD-纯DDD要求域对象在外部是不可变的,因此您必须将其转移到另一个对象,通常是DTO

      有意义-是的,所讨论的特定应用程序是高度分布式的应用程序。谢谢你的意见。什么意义上的分配?如果您使用的是类似远程处理的技术,通常仍然可以序列化域对象,并在没有任何问题的情况下跨边界传递它们。一旦你开始进入不同的平台,DTO通常会让事情变得更容易。