Java或C#中异常管理的最佳实践
我一直在决定如何在我的应用程序中处理异常。
如果我的异常问题来自1)通过远程服务访问数据或2)反序列化JSON对象。不幸的是,我不能保证这些任务中的任何一个都成功(切断网络连接,不正确的JSON对象,这是我无法控制的)。
因此,如果我遇到异常,我只需在函数内捕获它并返回FALSE给调用者。我的逻辑是,所有调用者真正关心的是任务是否成功,而不是为什么它不成功。
这是典型方法的一些示例代码(在JAVA中)
public boolean doSomething(Object p_somthingToDoOn){ boolean result = false; try{ // if dirty object then clean doactualStuffOnObject(p_jsonObject); //assume success (no exception thrown) result = true; } catch(Exception Ex) { //don't care about exceptions Ex.printStackTrace(); } return result;}
我认为这种方法很好,但我真的很想知道管理异常的最佳实践是什么(我应该在调用堆栈中一直冒出异常吗?)。
总结关键问题:
是否可以捕获异常但不会冒泡或正式通知系统(通过日志或通知用户)?
对于不会导致所有需要try / catch块的异常的最佳实践有哪些?
跟进/编辑
感谢所有反馈,在网上找到了一些关于异常管理的优秀来源:
最佳实践:异常管理(文章现在指向archive.org副本)
似乎异常管理是根据上下文而变化的事情之一。但最重要的是,人们应该如何管理系统中的异常。
另外注意通过过多的尝试/捕获代码腐烂或不给予例外它的尊重(例外是警告系统,还需要警告什么?)。
此外,这是m3rLinEz的一个很好的选择评论。
我倾向于同意Anders Hejlsberg和你的看法,大多数来电者只关心操作是否成功。
从这个评论中,它提出了一些在处理异常时要考虑的问题:
抛出此异常有什么意义?
处理它有什么意义?
呼叫者是否真的关心异常,还是只关心呼叫是否成功?
是否强制调用者管理潜在的异常优雅?
你是否尊重这种语言的含义?
你真的需要返回像布尔这样的成功标志吗?返回boolean(或int)更像是一种C思维模式,而不是Java(在Java中你只是处理异常)。
遵循与语言相关的错误管理结构:)!
炎炎设计
HUH函数
青春有我
相关分类