C# 我应该用数据传输对象包装实体吗

C# 我应该用数据传输对象包装实体吗,c#,dto,data-transfer-objects,C#,Dto,Data Transfer Objects,我有一个名为SchoolyearEditRequest的数据传输对象,它有4个保存域对象的属性 1) 我的DTO包装域实体是错误的吗 2) 如果是,我是否必须为每个域实体创建一个xxxDTO“包装器”,其中只包含客户端真正需要的属性 public class SchoolyearEditRequest { // Create a SchoolclassCodeDTO ??? // Create a SchoolyearDTO ??? // Create a collect

我有一个名为SchoolyearEditRequest的数据传输对象,它有4个保存域对象的属性

1) 我的DTO包装域实体是错误的吗

2) 如果是,我是否必须为每个域实体创建一个xxxDTO“包装器”,其中只包含客户端真正需要的属性

public class SchoolyearEditRequest
{
    // Create a SchoolclassCodeDTO ???
    // Create a SchoolyearDTO ???
    // Create a collection of TimeTableDTO`s ???

    public IEnumerable<SchoolclassCode> SchoolclassCodes { get; set; }
    public IEnumerable<TimeTable> TimeTablesWeekA { get; set; }
    public IEnumerable<TimeTable> TimeTablesWeekB { get; set; }
    public Schoolyear Schoolyear { get; set; }
}
公共班级学年编辑请求
{
//创建一个SchoolclassCodeDTO???
//创建一个学年来???
//创建TimeTableDTO's的集合???
公共IEnumerable学校类代码{get;set;}
公共IEnumerable TimeTablesWeekA{get;set;}
公共IEnumerable TimeTablesWeekB{get;set;}
公立学年{get;set;}
}

如果有的话,应该是另一种方式-您的域实体应该包装您的DTO

DTO的目的是以尽可能通用的方式简单地传输数据。这意味着没有事件、没有业务逻辑等,也不应该包含对域实体的引用——这违背了拥有DTO的目的

我的DTO包装域实体是错误的吗

是的,这是错误的。DTO应该没有任何逻辑,包括可能附加到组成DTO的对象的逻辑。将域对象包含到DTO中会暴露域逻辑,从而消除了首先使用DTO的主要好处

如果是,我是否必须为每个域实体创建一个xxxDTO“包装器”,其中只包含客户端真正需要的属性

public class SchoolyearEditRequest
{
    // Create a SchoolclassCodeDTO ???
    // Create a SchoolyearDTO ???
    // Create a collection of TimeTableDTO`s ???

    public IEnumerable<SchoolclassCode> SchoolclassCodes { get; set; }
    public IEnumerable<TimeTable> TimeTablesWeekA { get; set; }
    public IEnumerable<TimeTable> TimeTablesWeekB { get; set; }
    public Schoolyear Schoolyear { get; set; }
}
没错,这就是想法。通过这样做,您将消除客户机和域对象之间的耦合


注意:通常使用映射器来简化DTO和域对象之间的映射过程。

@rboarman Correct-automapper是我的首选,但也有。