当我可以将所有业务类放在类库中,在业务逻辑中使用它们,然后将这些相同的业务对象传递给边界类时,为什么要使用DTO / Domain对象?
更新: 所有这些都很棒,感谢您的帮助。跟进问题:
您通常在哪里放置这些DTO?与Domain对象一起,即在同一名称空间中?
namespace MedSched.Medical
{
public class MedicalGroup
{
//...
}
public class MedicalGroupDTO
{
//...
}
}
答案 0 :(得分:7)
答案 1 :(得分:4)
我可以想到使用DTO的两个基本方案:
您正在从未完成的数据创建业务对象,但验证将失败。例如,您正在解析创建业务对象的CSV文件或Excel文件。如果直接使用这些对象中的数据来创建业务对象,则很可能会失败对象中的多个验证规则,因为来自此类文件的数据容易出错。它们也往往具有与最终业务对象不同的结构:拥有不完整数据的占位符将非常有用。
您通过带宽密集型媒介传输业务对象。如果您使用的是Web服务,则需要在运输前使用DTO来简化对象;否则CLR将很难尝试序列化您的所有数据。
答案 2 :(得分:3)
DTO是数据传输对象,传输是关键词。当你想要通过网络传递你的对象并且可能与另一种语言通信时,它们很棒,因为它们“重量轻”(即没有业务逻辑)。
如果您的应用程序不是基于Web服务的,那么DTO实际上并不会为您购买任何东西。
因此,决定使用或不使用DTO应基于应用程序的体系结构。
答案 3 :(得分:1)
有时,您要传递的数据不会精确映射到业务对象的结构,在这种情况下您使用DTO。
例如:当您想要传递数据的子集或投影时。