C# 我应该用数据传输对象包装实体吗
我有一个名为SchoolyearEditRequest的数据传输对象,它有4个保存域对象的属性 1) 我的DTO包装域实体是错误的吗 2) 如果是,我是否必须为每个域实体创建一个xxxDTO“包装器”,其中只包含客户端真正需要的属性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
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是我的首选,但也有。