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)如果是这样,可以做吗?如果没有,什么是替代品,如果有? 预先感谢您的任何投入! 解决方法如果你使用支持DataAnnotations的东西,你应该能够使用元数据类来包含你的验证属性: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 – ASP.NET MVC:如何在localhost上自动禁用[R
- asp.net – 如何在生产.NET网站中更改Web引用?
- asp.net-mvc – 如何在ASP.NET MVC视图中对HTML列表项进行分
- asp.net – 移动浏览器设备检测在.NET
- asp.net – 创建新的实体数据模型的麻烦
- ASP.NET C#中的自定义控件
- asp.net-mvc – 如何从FilterAttribute中获取当前的Url?
- asp.net-web-api – 为什么我在web api中从我的POST获得404
- asp.net – 太多的Cookie OpenIdConnect.nonce导致错误页面
- asp.net-core – 对Post请求的两次调用:使用http 204和200
- asp.net – jquery禁用特定时间的按钮
- ASP.NET Ajax – Asynch请求有单独的会话吗?
- 是否有比ASP.NET成员资格提供程序更现代的会员/安
- asp.net-mvc – ASP.NET MVC中的替代用户管理
- asp.net-mvc – 人们如何使用编辑器/显示模板与H
- asp.net – 为什么我不能从Visual Studio 2005安
- asp.net-mvc – 为什么ListBoxFor不选择项目,但L
- asp.net – 偶尔获取SqlException:超时过期
- asp.net – AJAX和FormsAuthentication,如何防止
- 我可以使用ASP.NET成员身份实体框架吗?
