“在同一个包中混合类和接口”是不好的做法吗?

时间:2011-01-05 10:42:42

标签: java code-organization

我刚刚发现了一些我以前从未听说过的东西,我不同意(到现在为止)。在(upvoted和未进一步评论)answer我读到“为什么要在同一个包中混合类和接口”

所以我想知道,如果有理由在Java中分离接口和实现。

我知道我们没有义务将所有实现都放在接口的包中,但是(有时)明智的做法是没有吗?

问候
迈克
[; - )

4 个答案:

答案 0 :(得分:10)

我同意org.life.java - 我将拥有服务和底层service.impl包,但总是采用这种安排。

我不同意“不良做法”的措辞。那太强了。

java.util Collections API与此建议冲突。我不想成为告诉约书亚布洛赫他做过“糟糕工作”的人。

答案 1 :(得分:8)

将接口和实现保存在单独的包中的原因:

清晰的代码库 - 如果我们有一个带接口的包,另一个带有实现(通常是something.impl命名空间),它看起来更好,更整洁。代码结构显示/反映您对接口进行编码。

访问修饰符 - 我们可以将包私有访问修饰符用于某些包私有API,以用于相关的接口实现。

库结构 - 也许有一天你决定为API(接口)和实现创建不同的库。那么在不同的包中使用接口和实现是非常好的。因此,您可以在不重构代码库的情况下更改构建。

答案 2 :(得分:7)

对于OSGi,几乎需要使用单独的包AFAIK,以便您可以导出/导入API而无需导出/导入实现。

对于仅在内部的接口,将一切保存在一个包中不是问题。

答案 3 :(得分:3)

这不是坏事,但在不同的包中分离接口和实现肯定是一种好习惯。

例如

com.mycompany.domain.service  
com.mycompany.domain.service.impl

<强>优点

  • 统一包装结构
  • 有些时候,您只想处理某些类,可以通过包
  • 区分它