2011-01-05 58 views
1

如果验证东西在代码中你可以用返回值工作表明什么是错的,或者你可以抛出一个异常。在我的控制器我有特殊的验证这样的:“验证可能抛出异常” - 命名规范和语义

void DoSomething() 
{ 
    Validate(); // throws exception if something is wrong 
    ..... 
} 

我不知道是否有一个共同的命名约定,其言下之意是,这样我就不需要添加注释有异常时,什么是错的抛出// throws exception if something is wrong和区别于if (!IsValid())

注意:validation-naming-conventions不回答我的问题。接受答案后

更新:我已经从这个问题

  • AssertValid()或VerifyAndThrow()了解到的好名字(TNX @hacktick)
  • 验证必须与上下文区别(警告或错误)
  • 例外验证是一种合同或第二道防线,可能只存在于调试模式下,以确保周围的if (IsValid(...))不会错过任何东西(TNX科迪@灰)
+1

你为什么选择抛出异常?似乎并不明显,验证失败是一个真正的例外情况。返回值有什么问题? – 2011-01-05 09:46:31

+0

我使用Exceptional Verification作为第二道防线,以防if-s缺少某些东西 – k3b 2011-01-05 09:58:49

回答

2

通常你会用:

// for a validations that returns just plain yes no (true|false). in the case of a property use caching for the last validationresult. 
bool IsValid 

// for a validation that returns a list of errors of some sort (messagelist, id list, custom objects, whatever you need). 
object Validate(); 

// validates and throws an exception if one or more error occured. 
void ValidateAndThrow(); 

同时一定要考虑,如果你需要某种形式的警告。例如,如果您验证了您的注册DTO模型,并且想要在用户密码较弱时提醒用户,但是不想阻止用户在他选择时保存它。

+0

Thanks ** ValidateAndThrow()**即使对于非母语者也很简单直观。在此期间,我发现只有在调试版本中才存在的Microsoft-C++ -mfc-Method ** AssertValid **。我不知道哪个更好。验证上下文(警告,错误)也是一个好点。 – k3b 2011-01-05 10:03:54