【发布时间】:2014-04-02 09:43:56
【问题描述】:
我正在尝试找出具有多个结果值的方法的优缺点。
例如,我正在使用登录方法。如果登录成功则通过,否则我需要知道失败的原因。
1.返回真假(信息不足)
bool Login(string user, string password);
2。如果成功则返回true,否则抛出异常
public class UnknownUserException : Exception { }
public class WrongPasswordException : Exception { }
bool Login(string user, string password);
3.什么都不退。如果不成功则抛出异常
public class UnknownUserException : Exception { }
public class WrongPasswordException : Exception { }
void Login(string user, string password);
4.返回一个枚举值
enum LoginResult
{
Successful
UnknownUser,
WrongPassword
}
LoginResult Login(string user, string password);
“登录”只是一个例子。我想知道不同实现的优缺点是什么,以及它们或多或少适合哪些情况。
【问题讨论】:
-
1 和 2 显然不值得考虑。 #3 与通常的做事方式一致,但唯一能够认识到 #4 可能更适合您的情况的人是您。
-
API 是同步的还是异步的?
-
同步的,抱歉 :)
-
“异常是针对异常错误”这句话应该指导您对抗 #2 或 #3。 #4 在可能有多种失败原因的情况下是可以接受的,而在只有 I 原因失败的情况下 #1 是可以接受的。在我自己的库中,我创建了一个类 ResultString,其中包含一个用于成功/失败的布尔值和一个用于向用户显示详细信息的字符串。这允许函数确定故障的最佳描述。