【发布时间】:2010-10-14 01:16:33
【问题描述】:
处理方法中发生的已知错误有哪些好方法?
我们以用户注册方式为例。当用户注册时,会调用方法SignUp( User user )。可能会发生一些已知错误。
- 邮箱已注册
- 用户名已注册
- 等
你可以抛出特定的异常:
public void SignUp( User user )
{
// Email already exists
throw new EmailExistsException();
}
现在可以捕获特定的异常。
在我看来这很糟糕,因为异常被用于流量控制。
如果成功,您可以返回一个布尔值,并传入一个错误消息,如果发生错误,该消息将被设置:
public bool SignUp( User user, out/ref string errorMessage )
{
// Email already exists
errorMessage = "Email already exists.";
return false;
}
我不喜欢这个有几个原因。
- 必须返回一个值。如果方法需要返回值怎么办?
- 每次都必须传入错误消息。
- 方法的使用者应该是决定消息是什么的人。
我们只说方法中设置的实际消息是错误的。
您可以使用错误代码:
public enum Errors
{
Successful = 0,
EmailExists,
UsernameExists,
Etc
}
public Errors SignUp( User user )
{
// Email already exists
return Errors.EmailExists;
}
// or
public void SignUp( User user, out/ref Errors error )
{
// Email already exists
error = Errors.EmailExists;
}
最后一个是我最喜欢的,但我还是不太喜欢。我不喜欢传入错误代码的想法。就此而言,我也不喜欢返回代码的想法。
我喜欢使用自定义异常的想法,因为它看起来更简洁一些,但我不喜欢使用异常进行流控制的想法。也许在像这个例子这样的特定情况下,系统中已经存在的电子邮件应该是一个例外,没关系。
其他人在这种情况下做了什么?
【问题讨论】: