是否有 (Java) 包组织的最佳实践?[已关闭]

2022-08-31 05:56:02

不久前,我看到一个关于java包的细粒度组织的问题。例如,、 、 等。my.project.utilmy.project.factorymy.project.service

我现在找不到它,所以我不妨问这个问题。

在Java中组织包方面是否有最佳实践,以及它们中的内容?

如何在 Java 项目中组织类?

例如,我正在与几个人合作的一个项目有一个名为bean的软件包。它最初是一个包含简单豆类的项目,但最终(通过糟糕的经验和缺乏时间)包含所有内容(几乎)。我已经清理了它们,通过将一些工厂类放在工厂包中(具有创建bean的静态方法的类),但是我们还有其他类执行业务逻辑,而其他类执行简单的处理(而不是业务逻辑),例如从属性文件中检索代码的消息。

感谢您的想法和意见。


答案 1

按功能而不是模式或实现角色来组织包。我认为像这样的软件包:

  • beans
  • factories
  • collections

都错了。

我更喜欢,例如:

  • orders
  • store
  • reports

因此,我可以通过包可见性隐藏实现细节。订单工厂应位于包中,以便隐藏有关如何创建订单的详细信息。orders


答案 2

包组织或包结构通常是一个激烈的讨论。以下是软件包命名和结构化的一些简单准则:

  • 遵循 java 包命名约定
  • 根据其功能角色和业务角色构建软件包
    • 根据其功能或模块分解包。例如:com.company.product.modulea
    • 进一步的分解可能基于软件中的层。但是,如果包中只有几个类,请不要过分,那么在包中拥有所有内容是有意义的。例如: 或等。com.company.product.module.webcom.company.product.module.util
    • 避免过度结构化,IMO避免为例外,工厂等单独包装,除非有迫切需求。
  • 如果您的项目很小,请保持简单,只需使用很少的包。例如: 和 等。com.company.product.modelcom.company.product.util
  • 看看Apache项目上一些流行的开源项目。了解他们如何为各种规模的项目使用结构化。
  • 在命名时还要考虑构建和分发(允许您在不同的包中分发api或SDK,请参阅servlet api)

经过一些实验和试验,你应该能够想出一个你觉得舒服的结构。不要执着于一个惯例,对变化持开放态度。