9

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

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

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

4

2 回答 2

16

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

于 2010-12-21T13:26:49.607 回答
1

如果域对象的属性出现在多个视图模型中会发生什么?

这不应该发生。视图模型应该与您的域完全分离。

这回答了你的问题了吗?

于 2010-12-21T13:20:37.090 回答