Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/design-patterns/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/xamarin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Design patterns 哪些方法应该抛出异常,哪些方法应该返回布尔值_Design Patterns_Error Handling_Exception Handling_Software Design - Fatal编程技术网

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

Design patterns 哪些方法应该抛出异常,哪些方法应该返回布尔值,design-patterns,error-handling,exception-handling,software-design,Design Patterns,Error Handling,Exception Handling,Software Design,我不了解关于方法何时应该抛出异常或返回错误代码/booleanresult的最佳实践 具体来说,我遇到了这种情况:有一个线程每30秒轮询一个设备(检索其状态) 如果无法访问设备,则应用程序不得停止,因为它不需要能够与所述设备通信以执行其执行的所有其他操作 因此,一般来说,线程代码如下所示: while(true) { device.connect(); string st = device.getStatus(); updateStatus(st); device.disconn

我不了解关于方法何时应该抛出异常或返回错误代码/
boolean
result的最佳实践

具体来说,我遇到了这种情况:有一个线程每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);
}
实际上,当应用程序投入生产时,设备“应该”始终在线,这使我认为最好的选择是例外

另一方面,应用程序可以在不与设备通信的情况下完美地保持执行。未连接的唯一后果是与之相关的功能被禁用。这就是为什么我认为
布尔值
返回值更好的原因


如果设备没有连接,我将有一个线程每30秒抛出一个异常即使捕获到异常,就软件工程良好实践而言,这是否可以接受?

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

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

但是,如果有什么东西干扰了应用程序的正常执行,例如设备不可访问,我将使用异常。毕竟,这是一个例外情况。值得一提的是,如果我用Java这样的语言编写代码,我会使用选中的异常。

可能的重复: