【发布时间】:2010-11-01 16:16:37
【问题描述】:
我的同行编写的许多代码库方法都执行自己的错误处理,通常是通过捕获、通知和记录。
在这些情况下,方法返回一个布尔值,指示成功或失败。
但有时,如果方法失败,我希望调用代码知道原因,而返回布尔值是不够的。
解决这个问题的一种方法是在方法中保留错误处理,但使方法无效,并让方法抛出它们的异常。
但是,最近我养成了在适当的方法中返回异常的习惯,通常是在其他情况下可能无效的操作方法,但我想知道操作的状态。
返回 Exception 相对于 void 方法抛出 Exception 的优势在于,我认为它使其他程序员更容易使用您的库,并且,更重要的是,这意味着您可以安全地调用该方法而无需不必担心捕获异常
例如,如果方法只是 void,则程序员应该处理成功或失败可能不会立即显而易见。
但如果方法明确指定返回类型为 Exception,那么您就知道可以根据需要检查成功或失败。但这也意味着如果您不想捕获错误,则无需担心。
这有意义吗?也许我没有使用最好的例子,但一般来说,返回异常是否可以,或者有更好的模式吗?
更新
哇,压倒性的结果是不可能。我是这么想的。我必须说,这样做(返回异常)有点解决了一个问题,但确实感觉不对。
因此,从您的一些答案来看,这些特定场景(复杂类,或具有一个或多个外部依赖项(即 Web 服务)的类)的最佳解决方案似乎是自定义结果类?
更新:
我非常感谢所有意见,我正在阅读所有内容,并且我正在仔细考虑所有输入。
目前我更喜欢使用 void 方法,抛出异常,然后在外面捕获它们......这样更好吗?
【问题讨论】:
-
你们是否意识到 SO 社区刚刚拯救了安迪进入 TheDailyWTF 名人堂?这就是我如此喜欢的原因:我可以向数以千计的优秀开发人员询问并获得智慧,而不是搞砸大事。
-
erm....谢谢 Esteban...我猜 ;-)
-
@andy:别担心,伙计。我之所以这么说,是因为我实际上做了比你刚刚考虑更糟糕的事情方式。
-
@andy:另外,如果我被认为是一个傲慢的混蛋,我深表歉意。老实说,我想强调我如此喜欢的原因之一:它为我的培根节省了十亿次。
-
哈哈,不需要道歉!
标签: .net exception error-handling