【问题标题】:Should Exceptions be placed in a separate package?异常应该放在单独的包中吗?
【发布时间】:2010-10-23 22:35:41
【问题描述】:

我正在承担一个项目,其中所有异常都放在一个单独的包com.myco.myproj.exceptions 中。

这是好的做法吗?

【问题讨论】:

    标签: java exception-handling


    【解决方案1】:

    在我看来,问题在于您希望文件系统强调的内聚类型。

    将异常与异常、服务与服务、常量与常量等分组称为Logical Cohesion,一般认为是弱类型的内聚。

    根据事物对单一且明确定义的任务(例如usermanagementauthentication)的贡献对事物进行分组称为功能凝聚力,被认为比逻辑更强大且更可取凝聚。在此模型中,与用户管理相关的异常将与其他专用于用户管理的类一起进入 usermanagement 包。在这个模型中,我们根据功能角色对事物进行分组,而不是根据它们的实体“种类”——例如“例外”。

    所以是的,我也将汤姆霍廷的答案加倍。这不是一个好的做法。

    要了解更多关于凝聚力的信息,一些来源是geeksforgeekswikipedia。如果您想进一步研究这个概念,我相信您也可以找到其他来源的音调。

    【讨论】:

      【解决方案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:异常与导致异常的事物位于同一位置。
        猜你喜欢
        • 2010-11-03
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-01-24
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多