asp.net-mvc - 领域对象验证与 View 模型验证

标签 asp.net-mvc validation fluentvalidation

我正在使用ASP.NET MVC 3,并且正在使用FluentValidation验证我的 View 模型。我只是有点担心我可能走错了路。据我所知,模型验证应该在域对象上完成。现在,借助MVC,您可能具有多个需要验证的相似 View 模型。如果域对象的属性出现在多个 View 模型中,会发生什么情况?现在,您要两次验证同一属性,它们甚至可能不同步。因此,如果我有一个用户域对象,那么我想对该对象进行验证。现在,如果我有UserAViewModel和UserBViewModel,会发生什么,所以现在需要进行多次验证。

在我的新闻类中,我有一个名为Title的属性,这是必填字段。在我的 View 模型上,我还具有Title属性,我使用AutoMapper来映射News和NewsViewModel。因此,此验证发生了两次。何时进行域模型验证以及何时进行 View 模型验证?

上面的场景只是一个示例,因此请不要对此加以批评。

最佳答案

这是一个微妙的区别,但是对 View 模型的验证是为了验证正确的用户输入并为您的域模型形成一个反腐败层,而对域模型的“验证”将强制执行业务规则。这是完全正常的,您应该在两层上都进行验证。实际上,UserAViewModel的输入验证与UserBViewModel的输入验证略有不同可能是可行的。关于您的问题,通常我会尽量避免通过ViewModel公开域对象,而是在它们之间进行映射(通常使用AutoMapper之类的方法),这样,您的ViewModels才是真正的反腐败层,而不是域模型的属性包。希望能有所帮助。

关于asp.net-mvc - 领域对象验证与 View 模型验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4499355/

相关文章:

asp.net-mvc - 为我的 MVC 应用程序创建服务层?

jquery - MVC Jquery 转到 Controller 操作

validation - TYPO3 Fluid - 如何制作 f :form. textarea 强制

model-view-controller - fluidvalidation InclusiveBetween 动态设置范围

asp.net - 尽管启用了 SSL,但获取 "Firefox can’ t 建立与本地主机服务器的连接

asp.net - 使用 ASP.NET MVC 3 的联系页面

java - Play 框架中的表单验证

java - XML 验证不验证功能

asp.net-mvc - 如何使用具有不同验证消息的多个正则表达式

c# - 检查属性在 FluentValidation 列表中是否唯一