答案 0 :(得分:2)
自定义例外 - 当它们有意义时。由于框架中存在一些通用异常,情况并非如此。
答案 1 :(得分:1)
你会把库函数视为任何其他函数,从而让所有人都可以 例外,它无法处理流出 它原样?
是的,这绝对是默认策略。
您是否会为该库创建自定义例外?
是的,如果呼叫者可以想象做一些关于和的情况,他们需要能够将异常与其他异常区分开来。但这种情况非常罕见。
库对数据库的依赖会如何影响您的异常处理策略?
数据库依赖关系可能需要公开允许调用者指定库如何处理某些异常的设置(例如MaximumDeadlockRetries
)。
您是否会捕获所有异常并抛出库的异常? 你会设置原始的例外吗? 作为图书馆的内部例外 异常?
不,不是所有例外。对于特定的例外,它是远程可能的,尽管我能想到的唯一情况是我的库可能已经尝试处理异常(如上面的数据库场景中)并且失败了。
答案 2 :(得分:0)
包含几个可能抛出不同异常的不同类的库应该允许IMHO不允许来自内部的异常渗透为其原始类型。相反,它们应该包含在特定于库的异常中,尽可能清楚地与异常的原始类型相关。
例如,MagicDatabaseLibrary可能会定义MagicDatabaseException,而MagicDatabaseException又有一些派生异常MagicDatabaseTimeoutException,MagicDatabaseAuthenticationException等。如果SQL Server数据库抛出SQL Server超时异常(无论它是什么),那么应该包含在MagicDatabaseTimeoutException中。同样,对于可能发生的任何其他半预期异常。
如果没有这样做,那么调用库的代码将没有实际选择,但如果它有希望处理潜在的数据库问题,则使用“Pokemon异常处理”。例如,如果调用代码应该处理用户提供凭据以登录数据库并且连接失败的情况,则需要能够捕获该异常。如果调用代码不知道将是什么类型的异常,除了捕获每个异常之外它没有多少可做,希望它是由不正确的凭证或其他东西产生的,并向用户显示一条消息说连接失败。不像提供包装异常那样有用。