我有一个Java项目,它分为3个模块。这三个模块是独立的Maven项目,但它们之间存在依赖关系。关系很简单:
模块A取决于模块B
模块B依赖于模块C
我在模块C中定义了一个由公共方法抛出的检查异常。模块B可以获得此例外。
我的问题是,这对B来说是否是一个好习惯
我个人认为,模块应该只将其定义的已检查异常抛出到其客户端模块,除非是Java的预定义异常。但肯定有一个缺点,这意味着我必须在多个模块中创建两个不同的异常来表示相同的错误条件。
有人可以分享您的意见吗?
答案 0 :(得分:2)
我不会担心抛出异常以及更多关于处理它们的事情。
例外应该例外。只有在妥善处理它们时才应该捕获它们。如果你无法处理,如果它是一个未经检查的异常,则不执行任何操作,如果是,则捕获并重新抛出。
某些模块永远不应该抛出异常。我正在考虑UI控制器,因为如果用户看到堆栈跟踪,则会遇到糟糕的体验。我也在考虑Web服务,因为HTTP不知道或不关心您的异常。
您的错误处理策略不应围绕异常。您可以在模块之间发送代码并签订合同来处理它们。
记录不处理。
根据您发布的内容,我无法建议您做什么。我想更多地了解这些模块正在做什么。
答案 1 :(得分:2)
我从类型耦合的角度来看这个。如果模块B完全封装模块C中模块C中的类型,那么绝对不会在A和C之间引入类型耦合仅用于异常。如果模块B已经将C的类型暴露给A(即A直接依赖于C以及它依赖于B),那么继续并抛出C的异常。