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中的服务不是应用程序层和存储库之间的中介.它用于处理与单域实体无关的业务逻辑(因此不能封装在域实体中).存储库是从存储中实现聚合并将其存储在存储中所需的基础结构代码.应用程序逻辑(控制器)可以与域实体,服务和基础结构代码交互. 我不喜欢洋葱建筑. (编辑:岳阳站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- 在ASP.NET Core中使用AOP来简化缓存操作
- asp.net-mvc-4 – 全局过滤器MVC 4的执行顺序是什么
- asp.net – 在asp页面中显示来自其他站点的网页
- asp.net-mvc – 如果用户在int字段中放入非数字字符串,则自
- asp.net-mvc – 在ajax请求中返回PDF
- 运行命令(CMD)大全
- asp.net – 如何从TableAdapter中检索存储过程返回值
- asp.net – 动态创建和共享Google云端硬盘文件夹
- asp.net-core – 使用IdentityServer4生成访问令牌,无需密码
- asp.net-web-api – 可以从Request对象获取当前的MediaType
- asp.net-mvc – 从视图到控制器POST信用卡数据是
- asp.net 文章分页显示实现代码
- NHibernate中关于Inverse的理解和使用
- asp.net-mvc – ASP.NET MVC会话超时,绝对还是滑
- asp.net-mvc – 当注入服务或控制器的依赖关系太
- asp.net – Silverlight初始化错误2110 Internet
- ASP.NET API(MVC) 对APP接口(Json格式)接收数据与
- asp.net确保javascript只加载一次
- asp.net-mvc – TempData在第二个请求后不会被破
- asp.net-mvc – 为什么我在带有godaddy服务器的M