Java包是否应该抛出其依赖模块的已检查异常

Java包是否应该抛出其依赖模块的已检查异常,java,Java,我有一个Java项目,分为3个模块。这三个模块是独立的Maven项目,但它们之间存在依赖关系。关系很简单: 模块A依赖于模块B 模块B依赖于模块C 模块C是一个库,它处理诸如创建会话等低级数据库任务 模块B是定义DAO、DTO、实体等的数据库库 模块A是一个Restful Web服务,它包含业务逻辑并使用库B访问数据库 我在模块C中定义了一个checked异常,它是由公共方法引发的。模块B可以获取此异常 我的问题是,对于B来说 捕获此已检查异常并将模块B中本地定义的另一个已检查异常抛出到模块

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

模块A依赖于模块B

模块B依赖于模块C

  • 模块C是一个库,它处理诸如创建会话等低级数据库任务
  • 模块B是定义DAO、DTO、实体等的数据库库
  • 模块A是一个Restful Web服务,它包含业务逻辑并使用库B访问数据库
我在模块C中定义了一个checked异常,它是由公共方法引发的。模块B可以获取此异常

我的问题是,对于B来说

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


    有人能分享你的观点吗?

    我不太担心抛出异常,而更担心如何处理它们

    例外情况应该是例外情况。只有在处理得当的情况下才能抓住它们。如果无法处理,如果是未检查的异常,则什么也不做;如果是,则捕获并重新抛出

    有些模块永远不应该抛出异常。我想到的是UI控制器,因为如果用户看到堆栈跟踪,他们会有不好的体验。我还想到了web服务,因为HTTP不知道也不关心您的异常

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

    日志记录不可处理


    根据你发布的内容,我无法建议你做什么。我想知道更多关于模块的功能

    我从类型耦合的角度来看这一点。如果模块B完全封装了模块A中模块C中的类型,那么绝对不要在A和C之间引入类型耦合,这只是一个例外。如果模块B已经向A公开了C的类型(即A直接依赖于C以及通过其依赖于B),那么继续抛出C的异常。

    谢谢。我的意思是检查异常。编辑原创帖子。谢谢。编辑了原始帖子,以提供更多关于每个模块的功能。