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

Which methods should throw exceptions and which ones should return a boolean value

我不了解有关方法何时应抛出异常或 return 错误代码/boolean 结果的最佳实践。

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

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

所以,一般来说,线程代码是这样的:

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

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

我认为,在这种情况下,将 connect() 方法设为 return 布尔结果以报告设备是否可达可能是更好的做法,但是我完全不确定。

上面看起来像这样:

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

实际上,当应用程序处于生产状态时,设备 "should" 始终在线,这让我认为最好的选择是一个例外。

另一方面,应用程序可以在不与设备通信的情况下完美地保持执行。它未连接的唯一后果是与其关联的功能被禁用。这就是让我认为 boolean return 值更好的原因。

如果设备未连接,我将有一个线程每 30 秒抛出一个异常。 即使捕获了异常,这在软件工程良好实践方面是否可以接受?

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

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

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