哪些方法应该抛出异常,哪些方法应该返回一个布尔值

时间:2017-07-06 20:25:11

标签: design-patterns error-handling exception-handling software-design

我不了解方法何时应该抛出异常或返回错误代码/ 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秒抛出一次异常。 即使遇到异常,这在软件工程方面的良好做法是否可以接受?

1 个答案:

答案 0 :(得分:1)

根据原始问题评论中链接的线程,异常确实使您能够提供有关实际故障的更多详细信息。在这种情况下,布尔值可能是限制性的 - 如果设备未连接,或者它连接但没有响应,该怎么办?异常可以清楚地表明这两个条件,而布尔值则不能。

在我看来,布尔值在应用程序有两个可能的结果时仍可正常工作,它仍然可以“正常”运行 - 例如验证。例如,如果您的应用需要验证电子邮件地址并且用户输入了无效的电子邮件地址,那就没关系 - 该应用可以正常继续,只是提示用户修复验证错误。

但是,如果某些内容干扰了应用程序的正常执行,例如某个设备无法访问,我会发现异常。毕竟,它是一种特殊的条件。值得一提的是,如果我用Java这样的语言编写代码,我会使用已检查的异常since it's something that the application can reasonably be expected to recover from

相关问题