Val*_*yev 6 validation asp.net-mvc
常见场景:
层次结构域模型被映射到平面视图模型以用于呈现目的.
我在我的域中有一个完整的验证设置,并希望避免将视图模型映射到域对象,只是为了找出某些属性是无效的.我也不想在视图模型中复制验证逻辑.
这里有什么好的做法?
我反对视图模型和域对象的接口,因为视图模型通常是字符串和扁平的,而域对象通常是嵌套的,并且具有许多其他属性的数据类型.
我正在考虑一些可插拔的验证器,它将足够智能地验证域对象和视图模型,但对实现有点怀疑.
但为了简单起见,我倾向于这种方法:
服务器端验证仅在域模型中发生; 视图模型未经过验证,但使用JavaScript在客户端上验证数据.因此,在大多数情况下,我的视图模型将是有效的,验证逻辑将保留在一个位置,并且仅在域模型中发生.这种方法有一个缺点,即asp.net mvc 2验证将无法支持它.你怎么看?
谢谢.
微软企业库提供了这样一个“可插入验证”库,如果没记错的话,它是基于泛型的。
我不喜欢它的工作方式,更不用说对其他 EL 组件的依赖数量,但它仍然值得一看。
我绝不是该领域的专家,但我坚信数据应该在您想要对其执行某些操作之前进行验证,并且始终在提交到存储库之前进行验证。因此,验证逻辑的最佳位置是业务逻辑层。客户端验证虽然让用户感到高兴,但却使代码维护成为一场噩梦,并且还会导致代码重复,这可能会进一步导致问题。
在我看来,您的演示对象应该是 DTO 的。当用户将数据提交回控制器(和 BLL)时,您可以使用解析器将表示对象转换为业务对象,然后可以对其进行验证。
我建议阅读 Rudy Lacovara 的博客(又名《愤怒的 .NET 开发人员》)。他是一个非常谦虚的人,在这样的事情上有很多好话要说。
华泰
| 归档时间: |
|
| 查看次数: |
751 次 |
| 最近记录: |