异常应该放在单独的包中吗?
Posted
技术标签:
【中文标题】异常应该放在单独的包中吗?【英文标题】:Should Exceptions be placed in a separate package? 【发布时间】:2010-10-23 22:35:41 【问题描述】:我正在承担一个项目,其中所有异常都放在一个单独的包com.myco.myproj.exceptions
中。
这是好的做法吗?
【问题讨论】:
【参考方案1】:在我看来,问题在于您希望文件系统强调的内聚类型。
将异常与异常、服务与服务、常量与常量等分组称为Logical Cohesion,一般认为是弱类型的内聚。
根据事物对单一且明确定义的任务(例如usermanagement
或authentication
)的贡献对事物进行分组称为功能凝聚力,被认为比逻辑更强大且更可取凝聚。在此模型中,与用户管理相关的异常将与其他专用于用户管理的类一起进入 usermanagement 包。在这个模型中,我们根据功能角色对事物进行分组,而不是根据它们的实体“种类”——例如“例外”。
所以是的,我也将汤姆霍廷的答案加倍。这不是一个好的做法。
要了解更多关于凝聚力的信息,一些来源是geeksforgeeks 和wikipedia。如果您想进一步研究这个概念,我相信您也可以找到其他来源的音调。
【讨论】:
【参考方案2】:这将是一个不好的做法,并且会导致不必要的包间依赖。自定义异常类应始终定义在与能够抛出它的类相同的包中。您应该尽量减少创建在整个应用程序中使用的自定义异常,因为使用 Exception。自定义异常,顾名思义就是自定义异常,应该专注于特定的部分。这对于自定义实用程序类应该是相同的。
包应该能够呈现单个功能单元。有关示例,请参阅 this。 将被抛出的自定义异常是该功能单元的一部分,并且应该在同一个包中。
例如:
// Below should be in a single package
interface Draggable
abstract class Graphic
class Circle extends Graphic implements Draggable
class Box extends Graphic implements Draggable
final class GraphicValidator // utility class
// don't put below in a separate 'exceptions' package,
// who's gonna use it anyway other than the components in this package ?
class GraphicRenderingException extends Exception
【讨论】:
除非您是 java.* 提交者,否则不适合抛出 Exception 或 RuntimeException。 @TimP 你能详细说明一下吗?【参考方案3】:这是一种不好的做法。
这是一个巧合的分组。包应该是连贯的。不要将异常、接口、枚举、抽象类等分组到自己的包中。而是将相关概念分组。
【讨论】:
【参考方案4】:我希望包中存在包的异常。例如
com.oopsconsultancy.models.pricing
将包含定价模型和相关的例外情况。其他任何事情似乎都有点违反直觉。
【讨论】:
+1:异常与导致异常的事物位于同一位置。以上是关于异常应该放在单独的包中吗?的主要内容,如果未能解决你的问题,请参考以下文章