【问题标题】:Multiple dto for the same entity in list and detail pages?列表和详细信息页面中同一实体的多个 dto?
【发布时间】:2012-01-07 23:12:00
【问题描述】:

我正在使用 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..

【问题讨论】:

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


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

      我通常为同一个实体使用多个 DTO……但如果有人能确认这确实不是坏习惯,那就太好了。

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

      【讨论】:

        猜你喜欢
        • 2023-04-08
        • 1970-01-01
        • 2016-03-25
        • 1970-01-01
        • 1970-01-01
        • 2017-10-05
        • 2016-02-21
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多