我正在使用带有实体框架的 asp.net mvc 并开始学习 DDD。我正在从事包含调查的项目。这是我的域模型:
public class Survey
{
public int? SurveyID { get; set; }
public string Name { get; set; }
public decimal MinAcceptanceScore { get; set; }
public int UserFailsCount { get; set; }
public IEnumerable<SurveyQuestion> Questions { get; set; }
public IEnumerable<Prize> Prizes { get; set; }
public IEnumerable<SurveyAttempt> UserAttempts { get; set; }
}
我需要针对不同视图进行不同部分的调查,因此我创建了不同的 ViewModel:
public class ShortSurveyViewModel
{
public int? SurveyID { get; set; }
public string Name { get; set; }
public int UserFailsCount { get; set; }
public IEnumerable<SurveyAttempt> UserAttempts { get; set; }
}
public class ShortSurveyWithPrizesViewModel
{
public int? SurveyID { get; set; }
public string Name { get; set; }
public int UserFailsCount { get; set; }
public IEnumerable<SurveyAttempt> UserAttempts { get; set; }
public IEnumerable<Prize> Prizes { get; set; }
}
public class SurveyEditViewModel
{
public int? SurveyID { get; set; }
public string Name { get; set; }
public decimal MinAcceptanceScore { get; set; }
public int UserFailsCount { get; set; }
public IEnumerable<SurveyQuestion> Questions { get; set; }
public IEnumerable<Prize> Prizes { get; set; }
}
如果我希望我的调查存储库获取适当视图模型所需的信息,那么构建我的架构的最佳方式是什么?
我看到的不同解决方案:
Repository 可以将 IQueryable 返回到 SurveyService 并且 service 可以返回适当的视图模型,但我犹豫这样做是否正确,因为我认为视图模型应该在 UI 中创建,而不是在服务层中创建。
在我的领域层中创建三个适当的类。但是现在域将依赖于表示,并且每个新视图都应该创建新的域类。
检索完整的域对象并仅映射特定视图所需的属性。这不好,因为在我的示例中,问题只需要一种表示形式,并且可能是大量收集。