返回bool还是抛出异常是更好的设计方法
本文关键字:方法 抛出异常 bool 返回 更好 | 更新日期: 2023-09-27 18:00:24
我想知道哪种方法更好。比方说,我们有一种方法,例如,发送通知电子邮件。
void SendNotificaitonEmail();
因此,我可以编辑我的SendNotificaitonEmail()
方法,这样它现在可以执行以下操作:
bool SendNotificationEmail(out string errorMessage)
{
try
{
// This is the code that handles the actual sending of the email.
// ..
}
catch(Exception ex)
{
errorMessage = ex.Message;
return false;
}
}
但就设计而言,这不是错的吗?例如,errorMessage
变量与SendNotificationEmail()
方法的概念无关。此外,我应该向我的所有方法添加两个新变量——一个布尔变量,说明方法的结果(true/false),另一个字符串变量,如果出现错误消息,则包含错误消息。
另一种方法是创建我的自定义异常,并在调用第一个异常的其他方法中处理它们。
public void SendNotificaitonEmail()
{
try
{
// This is the code that handles the actual sending of the email.
// ..
if (somethingIsWrong == true)
{
throw new MyCustomException();
}
}
catch(Exception ex)
{
// Other exception handling code.
// ..
}
}
public void OtherMethod()
{
try
{
SendNotificaitonEmail();
}
catch(MyCustomException ex)
{
// Exception handling code.
// ..
}
}
编辑比方说,我想确保DAL代码中处理的所有操作都能成功执行。
我有像UpdateUserData
、GetUserById
、ChangeUserPicture
这样的方法。
因此,如果我想检查这些操作是否成功执行,我应该添加一些额外的变量,比如:
bool UpdateUserData(User userToUpdate, out string errorMessage);
User GetUserById(int id, out bool isError, out string errorMessage);
bool ChangeUserPicture(Picture picture, int id, out string errorMessage);
// ..
我有一个简单的应用程序,使用所有这些方法:
string errorMessage;
bool isUserUpdatedSuccessfully = UpdateUserData(someUserToUpdate, out errorMessage);
if (isUserUpdatedSuccessfully == true)
{
// If the DAL operation was executed successfully, do something..
}
else
{
// Code that informs the user that an error has occurred.
MyCustomErrorLogger(errorMessage);
}
将异常视为异常。不要将它们用于正常程序流控制。
返回值是指您期望可能发生的事情。
[在本地处理异常并返回错误代码的问题在概念上是可以的,但前提是该代码的所有使用者都检查了错误值,否则会发生错误,然后被忽略。]