关于从同级包访问 类 的经验法则

rule of thumb relating to access of classes from sibling packages

是否有关于您的包结构是否应允许从同级包中的另一个 class 访问 class 的经验法则。

一个例子我有一个代表登录页面的 class:

project.page.login.LoginPage

还有一个代表帐户主页的 class:

project.page.account.AccountHome

两个页面都访问项目的标准 chrome(页眉、页脚、菜单内容和 BasePage),将这些 classes 放在同级包中是否更好,例如project.page.chrome

project.page.chrome.BasePage
project.page.chrome.Menu
project.page.chrome.Footer
project.page.chrome.Header

或在父包中:

project.page

例如

project.page.BasePage
project.page.chrome.Menu
etc

我知道这是一个风格上的经验法则问题,在某种程度上是主观的。
我想知道的是,对于这类事情是否有普遍接受的规则。如果是这样的话,背后的原因是什么?每种方法的问题或好处是什么。

进一步吸血鬼的回答。 我的问题不是您是否 可以 将 classes 从一个同级包引用到另一个。关键是你是否应该以及原因是什么(无论哪种方式)。

没有父包或子包这样的东西。 Java 中的每个包都是完全独立的。将它们分层命名并像这样存储在文件系统中只是一种约定,但从技术上讲,这些包都是绝对不相关的独立包。

如何在包中组织源代码完全取决于您。

没有传统的方法来命名您的包或在包中对您的 类 进行分组。但大多数时候人们倾向于遵循标准 Java API,并采用其中的风格。 (仅举几例) 例如:utilcommonbasic

Package 允许将相关的 classes/packages 与适当的抽象组合在一起。 从技术上讲,在 Java 中没有规定兄弟包应该允许 class 相互访问。 从设计方法和良好实践的角度来看,建议以结构化和直观的方式对 classes/packages 进行分组。 例如,

   project.page
   project.page.login
   project.page.chrome
   project.page.account

这有助于应用程序的模块化单元测试。此外,正确的包层次结构有助于使用 log4j 等工具快速 调试 应用程序。

您可以使用 this,但最好的方法是检查您的规范并使其最易读和可扩展。
我能给你的最好建议是学习规则然后忘记它们来制定你的规则

可能没有确切的规则,但有一些准则。 Link to answer to another similar question 由于此答案出现在 SO 上,因此仅在此处粘贴 link。阅读 Uncle Bob 文章可能会给您一些指导。