我剛剛發現了一些我從未聽過的東西,但我不同意(現在)。在一個(upvoted和沒有進一步評論)answer我讀「爲什麼在同一包中混合類和接口」在同一個包中混合類和接口是不是很糟糕的做法?
所以我想知道,如果有理由將Java中的接口和實現分開。
我知道我們沒有義務在界面包中包含所有的實現,但是它有(沒有)明智的做法嗎?
問候
邁克
[;-)
我剛剛發現了一些我從未聽過的東西,但我不同意(現在)。在一個(upvoted和沒有進一步評論)answer我讀「爲什麼在同一包中混合類和接口」在同一個包中混合類和接口是不是很糟糕的做法?
所以我想知道,如果有理由將Java中的接口和實現分開。
我知道我們沒有義務在界面包中包含所有的實現,但是它有(沒有)明智的做法嗎?
問候
邁克
[;-)
理由保持接口和實現分開包裝:
清晰的代碼庫 - 它看起來「更好,更整潔如果我們有一個封裝接口和另一個實現(通常爲something.impl
命名空間)。代碼結構顯示/反映了你對接口進行編碼。
訪問修飾符 - 對於某些包私有API,我們可以使用包私有訪問修飾符來實現相關接口。
庫結構 - 也許有一天,你決定爲API(接口)和實現創建不同的庫。然後在不同的包中包含接口和實現是相當不錯的。所以你可以在不重構代碼庫的情況下更改構建。
它不是壞事,但它肯定是很好的做法,單獨的接口和實施不同的包。
例如
com.mycompany.domain.service
com.mycompany.domain.service.impl
優勢:
對於OSGi它幾乎是要求使用單獨的軟件包AFAIK,以便您可以導出/導入API而不必導出/導入實施。
對於僅在內部的接口,將所有內容保存在一個包中並不是問題。
我同意org.life.java - 我將有服務和底層service.impl包,但總是在那種安排。
我不同意措辭「不好的做法」。這太強大了。
java.util Collections API與此建議衝突。我不想成爲告訴Joshua Bloch他做了「糟糕的工作」的人。
我只找到第三點相關。我不明白你的第二點。如果您的實現位於單獨的包中,那麼包專用接口有什麼好處? – 2015-10-02 10:40:09