language-agnostic - 异常和抽象

标签 language-agnostic exception abstraction

什么时候应该抛出自定义异常?

例如我有一些连接到服务器的代码。连接到服务器的代码在连接失败时抛出 IOException。在调用它的方法的上下文中,这很好。在网络代码中也很好。

但由于这表示没有连接(因此无法正常工作),异常会一直传到 ui。在这个阶段,IOException 是非常不明确的。像 NoConnectionException 这样的东西会更好。

所以,我的问题是: 您应该在什么阶段捕获异常,而不是抛出另一个更适合抽象的(自定义)异常?

最佳答案

我希望异常会根据我要求原始方法执行的操作进行讨论。例如

read -> ReadException
connect -> ConnectException
buildPortfolio -> FailedToBuildPortfolioException

等这抽象了幕后发生的事情(即你是通过套接字连接等)。作为一般规则,当我为组件创建接口(interface)时,我通常会创建相应的异常或异常集。我的接口(interface)将被称为 Component,我的异常通常是 ComponentException(例如 RateSourceRateSourceException)。作为完整的组件集导出到不同的项目是一致且容易的。

缺点是您会创建很多异常,并且您可能必须执行很多翻译。好处是(正如您所确定的)您几乎没有抽象泄漏。

在方法调用(以及异常)层次结构中的某个时刻,您可能会决定无法进行恢复(或者恢复发生在不适当的位置)并转换为待处理的未经检查的异常。

关于language-agnostic - 异常和抽象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1084020/

相关文章:

mysql - 跟踪用户事件最具扩展性的方法是什么?

java - 处理 HTTP 错误调用的最佳实践

c++ - 如何处理非法地址删除

java - 带有按钮的单元格在java中不被视为选定的单元格

math - 强大的windows计算器工具?

language-agnostic - 捕捉可怕的蓝屏死机

javascript - 是否有将 'intentionally generic' String 或 Array JavaScript 方法传输到其他对象的首选方法?

c# - C# 中的协议(protocol)抽象

algorithm - 从后缀表示法构建表达式树的问题

java - 使用未捕获的异常处理程序在异常上启动新线程