C# IClientValidable实现是否违反MVC中的DRY原则?

C# IClientValidable实现是否违反MVC中的DRY原则?,c#,javascript,jquery,asp.net-mvc,validation,C#,Javascript,Jquery,Asp.net Mvc,Validation,MVC提供了许多验证属性,这些属性可以用作数据注释来执行简单的服务器端验证 但是,如果我想使用自己的业务逻辑进行一些自定义验证,我需要创建一个自定义验证属性,该属性派生自ValidationAttribute,并重写IsValid方法 到目前为止还不错 但是,如果我想在客户端执行相同的验证,我需要在我的validation属性类中实现IClientValidable接口,并实现GetClientValidationRules方法,该方法将告诉我的应用程序该验证也必须在客户端执行 然而,有争议的问

MVC提供了许多验证属性,这些属性可以用作数据注释来执行简单的服务器端验证

但是,如果我想使用自己的业务逻辑进行一些自定义验证,我需要创建一个自定义验证属性,该属性派生自
ValidationAttribute
,并重写
IsValid
方法

到目前为止还不错

但是,如果我想在客户端执行相同的验证,我需要在我的validation属性类中实现
IClientValidable
接口,并实现
GetClientValidationRules
方法,该方法将告诉我的应用程序该验证也必须在客户端执行

然而,有争议的问题是,我需要使用jQuery将此客户端验证的逻辑编写为单独的JavaScript。这与我在重写
IsValid
方法时在C#(或VB)中编写的逻辑完全相同

为什么我必须用不同的语言写两次相同的逻辑?这不是违反了干燥原则吗?我希望MVC能够为验证逻辑本身生成JavaScript

举例说明我所说的:

编辑:


此外,如果我的验证逻辑需要来自应用程序配置文件或应用程序缓存的数据,该怎么办?在为客户端验证编写的jQuery方法中如何使用它?如果我不能,是否还有其他方法来进行客户端验证,即使用应用程序数据的逻辑?

是的,但这通常是值得的

客户端验证的好处是速度快、服务器负载少。服务器验证的好处是安全性。实现这两个目标将获得两全其美

DRY是一个很好的经验法则,但与所有经验法则一样,在某些情况下,应该违反该规则

编辑以回答您的后续问题


如果jQuery需要来自服务器端配置的值,则需要将其作为JavaScript的一部分传递给客户端。例如,您可以在视图中定义一个保存服务器端值的变量。

谢谢您的回答。不过,我还有一个后续问题,我已将其添加到问题描述中。@业余程序员我已更新了我的答案以回答您的其他问题。再次感谢您的回答。我将尝试在自定义验证属性类的
IsValid
方法中编写验证逻辑。此外,我将获取所需的验证数据作为JSON,并将其存储在客户端,或者存储在
ViewBag
中,或者存储在视图的隐藏字段中,并使用此JSON数据编写实现相同验证逻辑的jQuery方法。我希望这能奏效。@不客气的业余程序员。如果我帮了忙,别忘了投赞成票或接受我的答案。