数据传输对象(DTO)的重点是什么?

Aar*_*ron 7 oop

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

更新:所有都是好点,谢谢你的帮助.跟进问题:

您通常在哪里放置这些DTO?与Domain对象一起,即在同一名称空间中?

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

    public class MedicalGroupDTO
    {
        //...
    }
}
Run Code Online (Sandbox Code Playgroud)

Ada*_*les 7

  • DTO为您的域模型提供了一个抽象层.因此,您可以更改模型,而不是违反您为服务客户端签订的合同.这类似于数据库设计中的常见做法,其中视图和过程成为底层数据模型的抽象层.
  • 序列化 - 您可能会过度暴露数据并通过网络发送膨胀的消息.这可以通过使用序列化属性来缓解,但您可能仍然有额外的信息.
  • 隐式与显式合同 - 通过公开域对象,您可以将其留给客户端来解释它们的用法,因为它们没有完整的模型可供使用.您通常会根据关联的存在或删除隐式更新域对象,或者盲目地接受所有更改.DTO明确表达服务的使用和期望的操作.
  • 断开连接的场景 - 拥有显式消息或DTO可以使您更容易实现Message Broker等消息传递和消息传递模式.
  • DDD - 纯DDD要求域对象是外部不可变的,因此您必须将其卸载到另一个对象,通常是DTO.