【问题标题】:rule of thumb relating to access of classes from sibling packages关于从同级包访问类的经验法则
【发布时间】:2016-12-13 22:52:21
【问题描述】:

对于您的包结构是否应允许从同级包中的另一个类访问一个类,是否有任何经验法则。

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

project.page.login.LoginPage

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

project.page.account.AccountHome

两个页面都访问项目的 std chrome(页眉、页脚、菜单内容和 BasePage),将这些类放在同级包中是否更好,例如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

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

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

【问题讨论】:

标签: java package packages


【解决方案1】:

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

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

【讨论】:

  • 我的问题不是你是否可以,而是你是否应该。例如,您可以将本地方法变量命名为 a1、a2、a3 等,但根据经验,您不应该这样做,因为这会造成混淆,并表明您的代码的用途没有意图或描述。
  • 好吧,正如我在第二段中所说,这完全取决于您。基本上这个问题很大程度上是基于意见的,因此应该像 SO 规则所建议的那样关闭主题。 ;-)
【解决方案2】:

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

【讨论】:

    【解决方案3】:

    可能没有确切的规则,但有一些指导方针。 Link to answer to another similar question 由于此答案出现在 SO 上,因此仅在此处粘贴链接。阅读鲍勃叔叔的文章可能会给你一些建议。

    【讨论】:

      【解决方案4】:

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

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

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

      【讨论】:

        【解决方案5】:

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

        【讨论】:

          猜你喜欢
          • 2010-11-13
          • 1970-01-01
          • 2013-04-24
          • 2014-01-09
          • 2015-05-06
          • 2013-02-07
          • 1970-01-01
          • 1970-01-01
          • 2012-01-04
          相关资源
          最近更新 更多