0

我不理解有关何时抛出异常或返回错误码/ boolean结果的最佳实践。哪些方法应该抛出异常,哪些应该返回一个布尔值

具体来说,我有这种情况:有一个线程每30秒轮询一个设备(检索其状态)。

如果设备无法访问,应用程序不能停止,因为它不需要能够与所提及的设备进行通信以执行它所做的所有其他操作。

所以,一般情况下,线程的代码是这样的:

while(true) 
{ 
    device.connect(); 
    string st = device.getStatus(); 
    updateStatus(st); 
    device.disconnect(); 
    sleep(30); 
} 

目前,如果设备不在线的connect()方法抛出异常。

我认为,在这种情况下,让connect()方法返回一个布尔结果以报告设备是否可到达是一种更好的做法,但我不确定。

上面是这样的:

while(true) 
{ 
    if(device.connect()) 
    { 
    string st = device.getStatus(); 
    device.disconnect(); 
    updateStatus(st); 
    } 
    sleep(30); 
} 

其实,当应用程序投入生产,该装置“应该”永远在线,这让我认为最好的办法是个例外。

另一方面,应用程序可以保持执行完美,无需与设备通信。它没有连接的唯一后果是与其关联的功能性被禁用。这就是我认为boolean返回值更好的原因。

如果设备没有连接,我将有一个线程每30秒抛出一个异常。 即使有例外情况发生,在软件工程良好实践方面这是否可以接受?

+0

可能的重复:https://stackoverflow.com/questions/253314/exceptions-or-error-codes – Fuhrmanator

回答

1

根据在原始问题的评论中链接到的线程,例外确实能够提供关于实际失败的更多细节。在这种情况下,布尔值可能是限制性的 - 如果设备没有连接,或者连接了什么但没有响应?一个异常可以清楚地表明这两种情况,而布尔值则不能。

在我看来,当应用程序有两种可能的结果,它仍然可以正常运行时(如验证),布尔值运行良好。例如,如果您的应用程序需要验证电子邮件地址并且用户输入了无效的电子邮件地址,那没问题 - 应用程序可以正常继续并提示用户修正验证错误。

但是,如果某些事情干扰了应用程序的正常执行,例如设备无法访问,我将会遇到异常。毕竟,这是一种特殊的情况。对于它的价值,如果我用Java这样的语言编写它,我会使用检查异常since it's something that the application can reasonably be expected to recover from

相关问题