Mac*_*cha 3 language-agnostic abstraction exception
什么时候应该抛出自定义异常?
例如,我有一些连接到服务器的代码。连接到服务器的代码在连接失败时会抛出 IOException。在它所调用的方法的上下文中,这很好。在网络代码中也很好。
但由于这表示没有连接(因此无法正常工作),异常会一直上升到用户界面。在这个阶段,IOException 的含义非常模糊。像 NoConnectionException 这样的东西会更好。
所以,我的问题是:您应该在哪个阶段捕获异常,而不是抛出另一个更适合抽象的(自定义)异常?
我希望异常能够根据我要求原始方法执行的操作进行讨论。例如
read -> ReadException
connect -> ConnectException
buildPortfolio -> FailedToBuildPortfolioException
Run Code Online (Sandbox Code Playgroud)
这抽象了幕后发生的事情(即您是否通过套接字等进行连接)。作为一般规则,当我为组件创建接口时,我经常创建相应的异常或一组异常。我的接口将被称为Component
,我的例外通常是ComponentException
(例如RateSource
和RateSourceException
)。它可以作为完整的组件集一致且轻松地导出到不同的项目。
缺点是您会创建大量异常,并且可能需要执行大量翻译。好处是(正如您所确定的)您几乎没有抽象泄漏。
在方法调用(以及异常)的层次结构中的某个时刻,您可能会决定无法进行恢复(或者位于不适当的位置)并转换为稍后处理的未经检查的异常。
归档时间: |
|
查看次数: |
598 次 |
最近记录: |