2011-01-05 52 views
7

我刚刚发现了一些我从未听过的东西,但我不同意(现在)。在一个(upvoted和没有进一步评论)answer我读“为什么在同一包中混合类和接口”在同一个包中混合类和接口是不是很糟糕的做法?

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

我知道我们没有义务在界面包中包含所有的实现,但是它有(没有)明智的做法吗?

问候
迈克
[;-)

回答

8

理由保持接口和实现分开包装:

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

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

库结构 - 也许有一天,你决定为API(接口)和实现创建不同的库。然后在不同的包中包含接口和实现是相当不错的。所以你可以在不重构代码库的情况下更改构建。

+0

我只找到第三点相关。我不明白你的第二点。如果您的实现位于单独的包中,那么包专用接口有什么好处? – 2015-10-02 10:40:09

3

它不是坏事,但它肯定是很好的做法,单独的接口和实施不同的包。

例如

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

优势

  • 统一封装结构
  • 当你想只处理一些类中的某些时候,你可以通过包装区分它
7

对于OSGi它几乎是要求使用单独的软件包AFAIK,以便您可以导出/导入API而不必导出/导入实施。

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

10

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

我不同意措辞“不好的做法”。这太强大了。

java.util Collections API与此建议冲突。我不想成为告诉Joshua Bloch他做了“糟糕的工作”的人。

相关问题