对于列表和详细页面中的同一实体,多个dto?
问题描述:
我正在使用Asp net MVC和EF开发一个站点。 我选择了不带域对象的视图层,所以我创建DTO做到这一点(和Automapper域映射到DTO对象)对于列表和详细页面中的同一实体,多个dto?
我有一个页面课程/列表,列出所有课程。 所以我创建了一个CourseDTO
public class CourseDTO{
public String Id { get; set; }
public String Title { get; set; }
public String Description { get; set; }
public List<ArgumentsDTO> Arguments {get;set;} //NOTE THIS
}
public class CourseListViewModel{
public List<CourseDTO> Courses { get; set; }
}
在课程/详细信息/ 123页我想也显示该课程的教师。
什么是最佳解决方案? 重用CourseDTO并使用一个单独的列表
public class CourseDetailViewModel{
public CourseDTO Course { get; set; }
public List<TeacherDTO> Teachers {get;set;} //NOTE THIS
}
或创建还含有教师列表中选择一个CourseDetailDTO带来教师到视图列表?
public class CourseDetailDTO{
public String Id { get; set; }
public String Title { get; set; }
public String Description { get; set; }
public List<ArgumentsDTO> Arguments {get;set;}
public List<TeacherDTO> Teachers {get;set;} //NOTE THIS
}
在最后这种情况下,我将有两个DTO为同一域对象..
答
这里的问题是,你是否在Detail
视图将需要CourseDTO
所有属性。如果是这样,那么第一个解决方案看起来不错,重新使用CourseDTO
视图模型。另一方面,如果在细节视图中对格式化本课程的某些属性有一些特定要求,则第二种方法也是可以接受的。
答
我通常对同一个实体使用多个DTO ......但如果有人能证实这确实不是不好的做法,那将是很好的。
我喜欢单独的DTO,因为这意味着可能需要检索更少的数据,从而提高性能。没有必要提供不需要的数据。