代码之家  ›  专栏  ›  技术社区  ›  GurdeepS

避免向代码库中的每个方法块添加try/catch的策略?

  •  2
  • GurdeepS  · 技术社区  · 14 年前

    在每一个方法块中编写try/catch都很烦人。

    谢谢

    3 回复  |  直到 14 年前
        1
  •  4
  •   David    14 年前

    在这个问题上我听到的最好的建议(实际上是在某个地方)是“只有在要处理异常时才捕获它”。也就是说,只有在该方法有处理异常的方法时,才在该方法中使用catch块才有意义。例如,如果方法出于某种原因 总是 返回一个值,异常要么被自动记录,要么在值中以某种方式指示(例如附加到某个自定义DTO或其他东西的错误消息)。在堆栈中向上冒泡异常并假设调用方将处理它,这没有什么错。

    当然,这并不是说根本不应该处理。正如您所建议的,最后一道防线应该始终是应用程序的全局异常处理。所有的失败都应该被优雅地处理,但更重要的是,它们应该只由应该处理它们的类/方法来处理,在许多情况下,这个类/方法并不是异常产生的方法。例如,在一个简单的表单over data web应用程序中,数据访问不一定需要处理异常。如果相关的话,它可以向其中添加信息,但是对于这样一个简单的应用程序,全局错误处理程序可以负责记录和显示错误消息。

    还应该注意(我假设您在这里指的是.NET)的 try 块不必 总是 伴随着 catch 封锁。你可以 try{}finally{}

        2
  •  1
  •   drekka    14 年前

    我同意大卫的看法。这是我的基本规则,或者。。。就像海盗守则,指南。。。

    • 应该始终有一个全局异常处理程序来捕获运行时和类无法处理的任何其他情况。

    • Try/catch应该只在您可以实际处理异常时才实现。不,记录异常并没有起到什么作用。

    • 应避免添加引发或引发异常或运行时异常。如果有大量的异常要处理,请创建一个新的异常类来包装它们。异常太普遍,会给其他开发人员带来问题。

    • Try/catch块很贵,除非有必要,不要放进去。

        3
  •  1
  •   Ned Batchelder    14 年前

    我发现将代码看作有三层,并使用适合每一层的异常策略是有帮助的。我把细节写在 Exceptions in the Rainforest .