如何在不重复代码的情况下实现业务和查看验证?

Dan*_*Dan 3 validation asp.net-mvc data-annotations

如何避免在ViewModel和业务/域对象上重复验证规则?

例如,我可以在我的ViewModel上使用DataAnnotation属性,这将在我的MVC Web应用程序中为我提供客户端和服务器端验证.但是这个ViewModel通常会被映射到一个业务/域对象并被赋予服务预先形成一些业务逻辑,这意味着验证必须再次发生,通常使用相同或类似的规则.无论如何围绕这个?

Jef*_*ddy 6

我认为你所描述的是正常的和可接受的.将您的UI和数据注释视为友好的UI验证,能够立即向用户显示输入数据的任何验证问题.

我会认为您的Business/Domain对象的验证是完整的验证,不仅仅是验证值而是强制执行业务规则(即 - 将项目添加到购物车 - >库存中的物品是什么?)

然后总是有后端验证,通常由数据库强制执行(即允许列中的空值).除非您的数据库允许在所有字段中使用空值,否则您实际执行的验证不仅仅是您提到的两个地方,而且我认为这是一件好事.

我认为最重要的是,您可能希望您的Business/Domain对象强制执行所有验证,并且您的客户端和后端验证只是强制执行最基本的验证.

希望有所帮助.