Java包结构

时间:2011-08-10 22:04:42

标签: java package

作为一种最佳实践,高级包中的接口/类是否可以依赖于较低级别包中的接口/类?

e.g。

可以com.company.core.SomeClass取决于com.company.core.apackage.AnotherClass

或者依赖关系应该以另一种方式流动?我试图消除包之间的循环。

4 个答案:

答案 0 :(得分:2)

即使在Java API本身中,这种依赖也很常见。

请注意:http://download.oracle.com/javase/6/docs/api/java/awt/image/renderable/package-use.html

您可以在java.awt中看到java.awt.image.renderable 中的类使用类。

(ADDENDUM)底线:实际使用两个方向。一个不是,恕我直言,一定比另一个好。

答案 1 :(得分:2)

通常,程序包的用户可能对使用com.company.functionality.MainUse实现的com.company.functionality.implementationdetail.FiddleWithStuff感兴趣,所以我要说你必须接受该方向的依赖关系。

但另一方面可能也是必要的,因为实现细节类可能需要实现作为功能接口一部分的接口。

所以,不幸的是,我认为像这样严格的方向性并不是避免循环的可行方法。

答案 2 :(得分:2)

他们通常以另一种方式流动。 com.mycompany.myproduct.Widget是一个接口,com.mycompany.myproduct.fancy.Button实现了它。

这个一般规则有很多例外,并且没有理由说它应该成为规则。

除了方法和字段的原始访问规则外,包本身只是文件夹。

更重要的是捆绑之间的依赖关系,即(基本形式)jar。罐子A取决于罐子B,取决于罐子C,再次依赖罐子A是一个真正的问题。如果同一个jar中的包之间有相同的圆圈,则会导致读取或调试代码的人或读取它的精英人员感到沮丧,但这不是一个大问题。

答案 3 :(得分:1)

当然,你正在使用所谓的自上而下的方法,一个包依赖于它的子包,但反之亦然。

自下而上的方法将是另一种方式,一个包将取决于其父包,但反之亦然。

只要您能够保持一致性,这两种方式都可以,但自上而下的方法更容易也更常见。