【问题标题】:How to organize java packages properly [duplicate]如何正确组织java包[重复]
【发布时间】:2014-06-15 01:50:42
【问题描述】:

[这不是23247951的重复]

我可能制作了太多的包,有些包深如mightypork.gamecore.control.events.input

主要是它很好,但有时我不确定我做得对。这是一个示例图像:

Tile.javaTileRenderer.java 属于tile 包,因为它们是“顶级”抽象或接口,还是属于子包,因为实现都在那里?我希望结构是合乎逻辑的,但这我真的不确定。请注意,这只是一个示例,我至少在十几个地方处于类似情况。

更一般地说,为某事的具体实现制作子包是一种好习惯吗?

【问题讨论】:

  • 很难具体说明,但您经常会发现比 mightypork.gamecore.control.events.input 更深的层次结构,并且接口/实现通常是大量包的来源。
  • 是的,我知道。另外,一个更好的例子可能是mightypork.util.math.constraints.num.caching.. 无论如何,我主要是问第二部分的事情。
  • programmers.stackexchange.com 会不会更适合这个问题?
  • 感谢投票,dystroy;非常感激。无论如何,我在这里问我知道java程序员在这里。不是像程序员这样不起眼的子论坛。*
  • 我投票结束,你应该知道不要问重复的问题。尤其是在 Stack Overflow 中主要基于意见并被认为是题外话。

标签: java packages


【解决方案1】:

如果您定义包,请尝试考虑模块化。哪些类型确实解决了构成具有清晰边界的模块的软件的一个方面?哪些其他类型定义了另一个依赖于其他模块的模块? Java 中的包接缝是分层的,但它们不是。无论如何,让子包只依赖于超级包,而不是相反。可以有不依赖于超级包的子包。并且不要创建像all my DAOsall my Controllers 这样的技术包。包的一个主要驱动方面是包内的类型确实具有cohesion 的程度。另一个是应用程序的分层。

我的方法是:首先将所有内容放入一个包中。当您的应用程序发展时,识别模块并重新打包它们。尽量降低包之间的依赖关系。检查同一包的任何一种类型是否相互依赖,或者它们处理相同的方面/共享相关的责任。

【讨论】:

  • 从实际的角度来看,这听起来是对的......但是我将在包资源管理器中拥有一个巨大的类列表,而使用嵌套包它看起来更干净(但没那么有用?)。
  • 应该删除 "while 包内(类型之间)高依赖关系" 部分。拥有依赖没有任何好处。
  • 我将 high 改为 exist 以解决凝聚力问题。
  • 但是这种方法不是结构化的。一个人不应该等到弄得一团糟才换包裹。设计从那里开始。从功能的角度来看,同一包中的类/接口是(并且应该)紧密耦合的。将 Tile、WallTile、DoorTile 和 TileRenderer 放在同一个包下有什么意义?
  • 在我看来,这种方法是结构化的。在创建一些类/类型之前,您不会找到包结构。当我创建一个类或类型时,我首先编写一个测试(Test First Approach)。所以我从不think ahead,因此,我永远不知道会出现哪些类/类型。所以打包是编码的重构结果,是我开发过程中固定的一部分。它现在工作多年而且非常好。很难用语言解释......你必须在实践中看到它:)
【解决方案2】:

嗯。这是一种观点,因此可能因人而异。是的,将抽象类/接口和具体类放在同一个包中是不好的。通过查看你的包,任何人都应该能够说 DoorTile、FloorTile 等都实现/扩展了 Tile。因此,它们被分组在同一个包下。并且所有抽象类/接口都可以分组在一个单独的包下。

【讨论】:

    【解决方案3】:

    更一般地说,为某事的具体实现制作子包是一种好习惯吗?

    IMO,该决定取决于接口的通用性,即您是否有可能并且很可能会编写该接口的不同实现?如果是 - 那么最好为这些不同的 impl 提供一个单独的包 - 如果一个默认的 impl 就足够了,那么我将把接口和 Impl 放在同一个包中。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-02-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-03-03
      • 2021-05-08
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多