我正在使用asp.net MVC和EF开发一个网站。我选择不把域对象带到视图层,所以我创建了DTO(和Automapper将域映射到DTO对象)
我有一个页面Course/List,其中列出了所有课程。所以我创建了一个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; }
}
在Course/Detail/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
视图模型。另一方面,如果在Detail视图中你对本课程的某些属性的格式有特殊要求第二种方法也是可以接受的
我通常为同一个实体使用多个dto…但如果有人能证实这确实不是坏做法,那就太好了。
我喜欢单独的dto,因为这意味着需要检索的数据更少,从而提高了性能。没有必要提供不需要的数据。