2011-01-05 14 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他做了「糟糕的工作」的人。

相關問題