大佬教程收集整理的这篇文章主要介绍了asp.net-mvc – 映射从域实体到DTO的验证属性,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
public class Product { public int id { get; set; } public String Name { get; set; } public decimal Price { get; set;} }
其中应用了某种类型的验证属性:
public class Product { public int id { get; set; } [NotEmpty,NotShorterThan10Characters,NotLongerThan100Characters] public String Name { get; set; } [NotLessThan0] public decimal Price { get; set;} }
你可以看到,我已经完全弥补了这些属性。在这里使用的验证框架(NHibernate Validator,DataAnnotations,ValidationApplicationBlock,Castle Validator等)并不重要。
在我的客户层,我也有一个标准的设置,我不使用域实体本身,而是映射到ViewModels(aka DTO),我的视图层使用:
public class ProductViewModel { public int id { get; set; } public String Name { get; set; } public decimal Price { get; set;} }
让我们说,我希望我的客户端/视图能够执行一些基本的属性级验证。
我看到的唯一方法是,可以重复在ViewModel对象中的验证定义:
public class ProductViewModel { public int id { get; set; } // validation attributes copied from Domain entity [NotEmpty,NotLongerThan100Characters] public String Name { get; set; } // validation attributes copied from Domain entity [NotLessThan0] public decimal Price { get; set;} }
这显然不令人满意,因为我现在在ViewModel(DTO)层中重复了业务逻辑(属性级别验证)。
那么可以做什么呢?
假设我使用像AutoMapper这样的自动化工具将我的域实体映射到我的ViewModel DTO,那么将映射属性的验证逻辑转换为ViewModel也不是很酷吗?
问题是:
这是一个好主意吗?
2)如果是这样,可以做吗?如果没有,什么是替代品,如果有?
预先感谢您的任何投入!
public class ProductMetadata { [NotEmpty,NotLongerThan100Characters] public String Name { get; set; } [NotLessThan0] public decimal Price { get; set;} }
并将其添加到域实体>上的MetadataTypeAttribute中。 DTO:
[MetadataType(typeof(ProductMetadata))] public class Product
和
[MetadataType(typeof(ProductMetadata))] public class ProductViewModel
这不会与所有验证器一起工作 – 您可能需要扩展您选择的验证框架来实现类似的方法。
以上是大佬教程为你收集整理的asp.net-mvc – 映射从域实体到DTO的验证属性全部内容,希望文章能够帮你解决asp.net-mvc – 映射从域实体到DTO的验证属性所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。