Exception handling 如何避免“上的异常驱动编程”;“连接/断开”;方法
我知道异常驱动编程是不应该做的事情(我想这是为什么)。 我正在构建一个库,在那里我必须建立与设备的连接,因此程序员将调用MyDeviceInstance.Connect,在某个点上,现在就是我的问题出现的地方 我将connect方法编写为void connect(),因此我不返回任何内容(因为实际上我不需要任何内容),但在很多情况下我都会抛出异常:Exception handling 如何避免“上的异常驱动编程”;“连接/断开”;方法,exception-handling,Exception Handling,我知道异常驱动编程是不应该做的事情(我想这是为什么)。 我正在构建一个库,在那里我必须建立与设备的连接,因此程序员将调用MyDeviceInstance.Connect,在某个点上,现在就是我的问题出现的地方 我将connect方法编写为void connect(),因此我不返回任何内容(因为实际上我不需要任何内容),但在很多情况下我都会抛出异常: 如果连接已经存在 如果MyDeviceInstance中存在一些错误设置 如果我的interop方法deviceConnect失败(这是最大的问题,
对于更新方法,如果设备断开连接,是否应该抛出?从编程的角度来说,这是一个例外,但从用户的角度来说,这将是一个非常正常的情况。在异常情况下使用例外。那么你怎么知道你有一个特殊的情况呢?当然,这取决于上下文,并没有硬性规定。请注意,异常非常重要,您不应该在应用程序的正常流中使用它们 在你提到的例子中,大多数似乎都有例外 对于
连接
,已经存在的连接可能不是例外情况。如果愿意,可以将其设为幂等。互操作deviceConnect
失败无疑是一种例外情况。一些你没有预料到的事情。您可以在此处引发异常,可能会将退出代码映射到有意义的异常
对于更新
,连接不存在可能是异常情况,您可以引发异常。此外,连接丢失也是例外。这样你就可以评估你的处境
此外,您还可以查看返回的int实际上是错误,而不是布尔值。在异常情况下使用异常。那么你怎么知道你有一个特殊的情况呢?当然,这取决于上下文,并没有硬性规定。请注意,异常非常重要,您不应该在应用程序的正常流中使用它们 在你提到的例子中,大多数似乎都有例外 对于
连接
,已经存在的连接可能不是例外情况。如果愿意,可以将其设为幂等。互操作deviceConnect
失败无疑是一种例外情况。一些你没有预料到的事情。您可以在此处引发异常,可能会将退出代码映射到有意义的异常
对于更新
,连接不存在可能是异常情况,您可以引发异常。此外,连接丢失也是例外。这样你就可以评估你的处境
此外,您还可以查看返回的int实际上是错误,而不是布尔值。如果您的连接/更新方法可能失败,则无论如何返回一个bool表示失败/成功。您还可以向类中添加错误代码和/或错误消息方法/属性,程序员可以在需要时访问这些方法/属性 如果您的连接/更新方法可能失败,那么请务必返回失败/成功的bool。您还可以向类中添加错误代码和/或错误消息方法/属性,程序员可以在需要时访问这些方法/属性 在这种情况下使用异常是完全正确的
反对使用异常的主要论点通常围绕性能。如果对所有错误传递都使用异常,这可能是一个问题。但是,当您正在执行的操作通常应该成功时,异常不会对性能产生任何影响。在这种情况下,异常正是正确的选择