asp.net-mvc – 构建视图模型的最佳方法是什么?
我正在使用带有实体框架的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; } } 如果我希望我的调查存储库获取适当的视图模型所需的信息,那么构建我的架构的最佳方法是什么? 我看到不同的解决方案: >存储库可以将IQueryable返回给SurveyService并且服务可以返回适当的视图模型,但我犹豫这样做是对的,因为我认为应该在UI中创建视图模型,而不是服务层. 解决方法
域驱动设计:
>您应该有一个存储库返回聚合根 – 在您的情况下调查和所有没有父调查不可能存在的关系 洋葱建筑: >您将创建一些暴露IQueryable< Survey>的存储库. – 更糟糕的是,您将使用具有CRUD接口的通用存储库 简单的架构: >您将使用注入的IDbSet< Survey>直接在您的控制器中作为存储库 没有最好的办法.它始终与您的目标和您的期望有关.对于小型应用程序,您可以使用简单的架构而不会出现任 域驱动设计更复杂. DDD的主要概念是域实体,值对象及其组成.域实体封装在这些数据上执行的数据和逻辑. DDD不适用于部分数据或DTO – 当您的域实体没有任何逻辑时,您做错了(它被称为贫血模型). DDD中的服务不是应用程序层和存储库之间的中介.它用于处理与单域实体无关的业务逻辑(因此不能封装在域实体中).存储库是从存储中实现聚合并将其存储在存储中所需的基础结构代码.应用程序逻辑(控制器)可以与域实体,服务和基础结构代码交互. 我不喜欢洋葱建筑. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |