如何在 java 中组织大型项目的异常处理?

How to organize exception handling in java on large projects?

我熟悉异常处理的基础知识,包括 trycatchthrowthrows 关键字。

我的问题是关于在大型项目中应该如何组织他的异常处理。我找不到一本书或资源来解释如何以“标准”方式实现异常,我找到的每一个资源都只教你基础知识。

例如我应该把 try-catch 块放在哪里?如果我们想象一个方法链,链的顶部 link 是主要的,底部是抛出异常的方法是否有关于 try-catch 块应该在哪里的约定?

谢谢。

根据所使用的结构化方法,这个问题可能会得出自以为是的答案。但我可以分享我遵循的标准或我的团队遵循的标准,这似乎非常有效和合理。

我们在编写任何代码之前都会做出一些标准假设

  1. 一个方法负责单一职责。 (与 class 的 SR 内联)
  2. 方法 returns 预期输出或引发异常。
  3. 我们有一组自定义异常 classes,其父级 class 从 Exception / Throwable 扩展而来,适用于每个独特的错误场景

这些假设/规则不仅帮助我们在异常方面构建代码,而且还帮助我们拥有更好的可维护代码库。考虑到异常处理,请牢记假设,

  1. 方法体写在一个 try/catch 块中,它可能会捕获所有可能的异常(不是 RuntimeException / Exception / Throwable)
  2. 可以通过与上下文相关的方法引发自定义异常,其中包含消息、错误代码或自定义异常库中定义的更多信息等参数。
  3. 最顶层的应用程序将捕获基本自定义异常,并可以相应地处理消息和代码。该层还将捕获一个 Throwable,以捕获所有其他异常,并在 REST API.
  4. 的情况下执行类似发送 500 的操作

在任何情况下,应用程序都不会崩溃。所以 IMO,每个具有逻辑上下文的方法都应该使用 try/catch 块并引发面向上下文的异常。上面的层可以捕获这样的异常,然后进一步自定义异常或在需要时抛出不同的异常。