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;
}
我认为这种方法很好,但我真的很想知道管理异常的最佳实践是什么(我真的应该在调用堆栈中一直冒泡异常吗?)。
关键问题摘要:
- 是否可以只捕获异常,但不冒泡它们或正式通知系统(通过日志或通知用户)?
- 对于不会导致所有需要尝试/捕获块的异常,有哪些最佳实践?
跟进/编辑
感谢所有的反馈,在网上找到了一些关于异常管理的优秀资源:
- 异常处理|的最佳做法O'Reilly Media
- .NET 中的异常处理最佳做法
- 最佳做法:异常管理(文章现在指向 archive.org 副本)
- 异常处理反模式
似乎异常管理是根据上下文而变化的事情之一。但最重要的是,在如何管理系统内的异常方面应该保持一致。
此外,还要注意通过过多的尝试/捕获或不尊重异常来破坏代码(异常是警告系统,还需要警告什么?)。
此外,这是m3rLinEz的一个很好的选择评论。
我倾向于同意Anders Hejlsberg和你的观点,即大多数呼叫者只关心操作是否成功。
从这个评论中,它提出了一些在处理异常时需要考虑的问题:
- 引发此异常的意义何在?
- 如何处理它?
- 呼叫者是否真的关心异常,或者他们是否只关心呼叫是否成功?
- 强制调用方管理潜在异常是否正常?
-
你是否尊重语言的偶像?
- 你真的需要返回一个像布尔值这样的成功标志吗?返回布尔值(或int)更像是C思维方式,而不是Java(在Java中,您只会处理异常)。
- 遵循与:)语言关联的错误管理构造!