列表和详细信息页面中的同一实体有多个dto?

时间:2011-11-28 13:50:41

标签: asp.net-mvc entity-framework architecture viewmodel dto

我正在使用Asp net MVC和EF开发一个站点。 我选择不将域对象带到视图层,因此我创建了DTO来执行此操作(以及Automapper将域映射到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 ..

2 个答案:

答案 0 :(得分:0)

这里的问题是,在Detail视图中,您是否需要CourseDTO的所有属性。如果是这样,那么第一个解决方案似乎很好并重用CourseDTO视图模型。另一方面,如果在详细信息视图中您在格式化本课程的某些属性方面有一些特定要求,则第二种方法也是可以接受的。

答案 1 :(得分:0)

我通常会为同一个实体使用多个DTO ...但如果有人能够确认这确实是不错的做法会很好。

我喜欢单独的DTO,因为这意味着可能需要检索更少的数据,从而提高性能。提供不需要的数据毫无意义。