Java包是否应该引发其依赖模块的检查异常

时间:2013-09-01 14:25:47

标签: java

我有一个Java项目,它分为3个模块。这三个模块是独立的Maven项目,但它们之间存在依赖关系。关系很简单:

模块A取决于模块B

模块B依赖于模块C

  • 模块C是一个库,用于处理低级数据库任务,如创建会话等。
  • 模块B是一个定义DAO,DTO,实体等的数据库库。
  • 模块A是一个Restful Web服务,它包含业务逻辑并使用库B来访问数据库。

我在模块C中定义了一个由公共方法抛出的检查异常。模块B可以获得此例外。

我的问题是,这对B来说是否是一个好习惯

  1. 捕获此已检查的异常,并将模块B中本地定义的另一个已检查异常抛出到模块A。
  2. 未捕获已检查的异常,但在其公共方法中声明此异常,以便将其传递给模块A.
  3. 我个人认为,模块应该只将其定义的已检查异常抛出到其客户端模块,除非是Java的预定义异常。但肯定有一个缺点,这意味着我必须在多个模块中创建两个不同的异常来表示相同的错误条件。

    有人可以分享您的意见吗?

2 个答案:

答案 0 :(得分:2)

我不会担心抛出异常以及更多关于处理它们的事情。

例外应该例外。只有在妥善处理它们时才应该捕获它们。如果你无法处理,如果它是一个未经检查的异常,则不执行任何操作,如果是,则捕获并重新抛出。

某些模块永远不应该抛出异常。我正在考虑UI控制器,因为如果用户看到堆栈跟踪,则会遇到糟糕的体验。我也在考虑Web服务,因为HTTP不知道或不关心您的异常。

您的错误处理策略不应围绕异常。您可以在模块之间发送代码并签订合同来处理它们。

记录处理。

根据您发布的内容,我无法建议您做什么。我想更多地了解这些模块正在做什么。

答案 1 :(得分:2)

我从类型耦合的角度来看这个。如果模块B完全封装模块C中模块C中的类型,那么绝对不会在A和C之间引入类型耦合仅用于异常。如果模块B已经将C的类型暴露给A(即A直接依赖于C以及它依赖于B),那么继续并抛出C的异常。