域对象验证与视图模型验证

Bre*_*ogt 8 validation asp.net-mvc fluentvalidation

我正在使用ASP.NET MVC 3,我正在使用FluentValidation来验证我的视图模型.我只是有点担心我可能没有走上正确的轨道.据我所知,模型验证应该在域对象上完成.现在使用MVC,您可能有多个类似需要验证的视图模型.如果域对象的属性出现在多个视图模型中会发生什么?现在您要验证两次相同的属性,它们甚至可能不同步.所以如果我有一个用户域对象,那么我想对这个对象进行验证.现在如果我有UserAViewModel和UserBViewModel会发生什么,所以现在需要进行多次验证.

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

上面的场景只是一个例子,所以请不要批评它.

Rao*_*oul 16

这是一个微妙的区别,但您的视图模型的验证是验证正确的用户输入并为您的域模型形成反腐败层,而域模型上的"验证"强制执行业务规则.这是完全正常的,您应该在两个层上进行验证.事实上,UserAViewModel与UserBViewModel的输入验证略有不同可能是可行的.至于你的问题,通常我会尽量避免通过我的ViewModel暴露域对象,而是在它们之间进行映射(通常使用像AutoMapper这样的东西),这样你的ViewModel真的是反腐败层而不是域模型的属性包.希望有所帮助.