asp.net-mvc – 在ASP.NET MVC中使用域对象和视图模型时避免验证
常见场景:
层次结构域模型被映射到平面视图模型以用于呈现目的. 我在我的域中有一个完整的验证设置,并希望避免将视图模型映射到域对象,只是为了找出某些属性是无效的.我也不想在视图模型中复制验证逻辑. 这里有什么好的做法? 我反对视图模型和域对象的接口,因为视图模型通常是字符串和扁平的,而域对象通常是嵌套的,并且具有许多其他属性的数据类型. 我正在考虑一些可插拔的验证器,它将足够智能地验证域对象和视图模型,但对实现有点怀疑. 但为了简单起见,我倾向于这种方法: 服务器端验证仅在域模型中发生;视图模型未经过验证,但使用JavaScript在客户端上验证数据.因此,在大多数情况下,我的视图模型将是有效的,验证逻辑将保留在一个位置,并且仅在域模型中发生.这种方法有一个缺点,即asp.net mvc 2验证将无法支持它. 谢谢. 解决方法
Microsoft Enterprise Library提供了这样一个“可插入验证”库,如果内存服务,它将基于泛型.
我不喜欢它的工作方式,更不用说其他EL组件的依赖数量,但它仍然值得一看. 我绝不是这个领域的专家,但我坚信数据应该在您想要使用它之前进行验证,并且在提交到您的存储库之前总是这样.因此,验证逻辑的最佳位置是您的业务逻辑层.客户端验证虽然取决于用户,但却使代码维护成为一场噩梦,并导致代码重复,从而导致问题进一步发生. 在我看来,您的演示文稿对象应该是DTO的.当用户将数据提交回控制器(和BLL)时,您可以使用解析器将表示对象转换为业务对象,然后可以对其进行验证. 我推荐阅读Rudy Lacovara的博客(又名The Angry .NET Developer).他是一个非常谦虚的家伙,对这样的事情说了很多好话. HTH (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- asp.net-mvc – 异步处理asp.net mvc,提供客户端进度反馈
- ASP.NET 5 MVC6自定义CSS和Javascript放置约定
- asp.net-mvc – 设计选择:WCF还是服务堆栈?
- asp.net-mvc-4 – 为什么超过指定maxRequestLength的请求会
- asp.net-mvc – 如何使Controller成为ASP.NET MVC中每个应用
- asp.net-mvc – 调用SaveChanges()时从更新中排除属性
- asp.net-mvc – MVC 4. IIS 7.5 PUT返回405
- asp.net-mvc – ASP.NET MVC重复任务
- asp.net-web-api – 使用ASP.NET WebAPI消费Atlassian Webh
- asp.net – 使用Visual Studio 2012发布到azure时,我可以使