【发布时间】:2017-03-30 13:26:39
【问题描述】:
我的项目目前具有以下包结构。
这里我添加了一个包名utils,并在其中定义了与该模块相关的所有实用程序类。这些已被其他包(即impl、internal)使用,因此我在util 包public 中创建了类和方法。
因为它是公共的,不仅此模块中的类,其他模块中的类也可以访问它,当我使用我的 IDE 编码时,它们会显示为编码建议。
我浏览了几篇研究论文,这些论文描述了这会如何降低 API 的可用性并给参与开发的开发人员带来糟糕的体验 [ref1、ref2]。
我了解 java 不允许我使 util 中的类可以访问 impl 和内部包,而不是其他人。
将我的实用程序类放到包“util”中是否正确?还是应该将所有相互通信的类放到同一个包中?
【问题讨论】:
-
就 OOP 设计而言,您不应该有实用程序类 :)
-
我用了不好的例子吗? o.O
-
您使用的是哪个 IDE?在 Eclipse 中,作为代码建议显示的第一个类是同一包中或导入的类中的类(包括
java.lang.*)。确实会出现其他公共类,但它们会显示在这些类之后。 -
我正在使用想法。由于这些类根本不打算在其他包中使用,所以我试图让其他包无法访问它们。由于我使用 OSGI 来加载我的模块,如果不小心有人会在 IDE 建议的不同类中使用它,则会导致运行时错误。
-
这可能有点矫枉过正,但随着应用程序的增长,管理多个项目的代码库会更容易。例如,应用程序的每个功能层都在自己的项目中。这可以在其自己的项目中包含 util 类,其中 util.jar 只是成为需要它的其他项目的依赖项。这有助于避免 util 类成为垃圾抽屉,因为开发人员必须有意去另一个项目添加新的 util 类/方法。根据构建工具的不同,这也将强制 util 类是通用的,以避免循环依赖。
标签: java api usability access-modifiers