最佳异常处理做法或建议?[关闭]


12

我认为程序的两个主要问题是代码结构/组织和错误处理。我正在阅读Code Complete 2,但是我需要阅读一些有关潜在问题的书籍。

例如,在一个网站上,如果仅当用户通过javascript篡改数据时才有可能发生某些事情,您是否为此写信?另外,什么时候不捕获错误?当您编写一个期望一个字符串和一个int作为输入的类,而它们不是一个字符串和int时,您是否进行检查,还是让它冒泡到传递了错误参数的调用方法?

我知道这是一个广泛的主题,在这里不能一口气回答,所以我要寻找的是一本通常被教为教授适当的异常处理实践的书或资源。


1
您使用什么语言和开发平台?
Yusubov 2012年

1
我认为,“清洁代码”有关于这个问题的好章
晃龙

@ElYusubov说什么。您正在处理的语言/平台的实现细节和标准在最佳实践上有很多影响。
vaughandroid

Answers:


12

要记住的一件好事是执行异常处理when there is a need

对于.NET开发平台,只需遵循MSDN指南- 处理异常的最佳实践,并查看此出色的代码项目文章-.NET中的异常处理最佳实践

但是,以下准则对于任何开发平台都是最正确的:

  • 不要管理带有例外的业务逻辑。请使用条件语句。如果可以使用if-else语句明确地进行控制,则不要使用异常,因为它会降低可读性和性能(例如,空控制,零控制除法)。。

  • 异常名称必须清晰,有意义,说明异常的原因。

  • 实现方法时,将错误条件抛出异常。例如,如果您返回-1,-2,-3等值而不是FileNotFoundException,则无法理解该方法。

  • 捕获特定的异常,而不是顶级的Exception类。这将带来额外的性能,可读性和更具体的异常处理。

  • 具有条件的Null控制不是捕获NullPointerException的替代方法。如果某个方法可能返回null,请使用if-else语句对其进行控制。如果返回可能引发NullPointerException,请捕获它。

  • 尽量不要因为价格而抛出异常。如果必须重新抛出,请重新抛出相同的异常,而不是创建新的异常。这将带来额外的性能。您可以在每个图层中为该异常添加其他信息。

  • 通过扩展当前的Exception类(例如UserException,SystemException及其子类型)并使用它们来定义您自己的异常层次结构。通过这样做,您可以专门化异常并定义可重用的模块/异常层。在此链接中还有更多内容


2
一些不错的一般要点,尽管我认为您的第5点(“带条件的空控件...”)不是很清楚。
vaughandroid

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.