2010-01-29 129 views
18

Java中的接口應該駐留在它們自己的目錄中嗎?或者應該將接口和它的實現放在同一個目錄(包)中?謝謝。Java界面目錄結構?

+0

根據佈局軟件包的邏輯,我會經常添加一個'impl'子包來指定實現,如:com.stackoverflow.questions,com.stackoverflow.questions.impl。 – Kylar 2010-01-29 17:30:30

回答

11

接口並不特別需要他們自己的目錄。應該把它們放在有意義的地方,就像把類放在有意義的地方一樣。在很多情況下,把它們放在同一個地方也許有意義。

1

相同的包裝。用戶不應該知道或在意他們正在使用接口

+6

是的。使用'I'前綴是堅果。 – 2010-01-29 18:21:20

+0

用戶需要知道他們是否必須自己實例化這些類。 – Powerlord 2010-01-29 19:06:04

+2

「相同的包」不回答問題。在同一個軟件包中進行單元測試是非常普遍的,因爲它正在測試它的類,但將它放在一個完全不同的目錄中。 – SyntaxT3rr0r 2010-01-29 22:09:30

14

我看到的一種模式是將接口放在一個基本目錄中,然後將這些實現放在一個子目錄中。

例如,接口可能會去這裏:

com.myproject.data.dao.CustomerDao (some people do ICustomerDao for interfaces, but some don't like that.) 
com.myproject.data.dao.ProductDao 

而且實現可能去這裏:

com.myproject.data.dao.hibernate.HibernateCustomerDao 
com.myproject.data.dao.hibernate.HibernateProductDao 
com.myproject.data.dao.someotherorm.SomeOtherOrmCustomerDao 
etc. 

這可能在某些情況下工作,可能不會在其他國家,但只是要想一想。

+0

感謝這個角度 – ken 2010-01-29 17:34:36

+0

我最終爲一個項目採取了這種方法。我意識到我真的不希望用戶訪問除界面之外的任何內容。根據我的理解,如果這些類被分離到它們自己的包中(訪問級別需要公開),這是不可能的。我更喜歡你提供的方法,但對於我已經給出的方案效果不佳。 – abrarisme 2016-08-18 05:29:00

0

它根本不需要把接口放在同一目錄(包)中。如果你的界面具有公共訪問權限,那麼你可以在任何地方,任何包中導入它。

-1

我讀過的問題(但它奇怪的公式化)不是如果接口應該在他們自己的目錄中。現在的問題是,如果你要重新創建完整的目錄結構(粗體強調的是在問題的標題),其中一個分支將只包含接口,這樣的:

pureooabstraction/ 
| 
|_com/ 
    | 
    |_example/ 
    | 
    |__SomeInterface.java 
    |__SomeOtherInterface.java 

src/ 
| 
|_com/ 
    | 
    |_example/ 
    | 
    |__SomeClass.java 
    |__... 

pureooabstraction/目錄結構將只包含「純抽象類」(從OO的角度來看,而不是Java的'抽象'定義),也就是Java中的接口。

「代碼」所在的細節實現細節(在OOA/OOD級別不存在)將在src/目錄中進行。

如果你的開發過程從OOA到OOD到OOP,這當然是有意義的。

+0

不,他只是問是否將接口放在與實現相同的包中 – 2010-02-01 16:04:53

5

由於已經有一些很好的意見,我只想補充一點:

在一些項目中,我們即使如此遠了,我們放置所有接口到一個子項目(Maven的模塊),並實現到另一個一。通過這種方式,可以在項目的早期完全分離接口,並在項目的早期階段完成接口項目,並將其交付給其他重複使用這些接口的團隊。在每個項目中,我們使用相同的軟件包。

一般而言,我會說,你應該分開接口和它們的實現,只要你符合它,方法並不重要。

0

無論你想要什麼,但將接口保持在相同的包和目錄結構中是絕對沒問題的。只要看看java api。如果你選擇了任何包,你會注意到許多包含類和接口。一些接口是由同一個包中的類實現的,有些則不是。

我認爲最糟糕的做法是堅持必須爲接口有不同的目錄。我看到/ services和/ impl等目錄,這些目錄結構只會弄糟。在我目前的工作場所,我們僱傭了很多來來往往的承包商,我們的一些項目有多種類型的界面目錄。我認爲唯一一次使用單獨的目錄是有意義的,如果你打算將接口複製到其他項目中,比如EJB,但是即使如此,如果你爲接口使用共享項目,他們也可以擁有相同的包。

所以簡短的答案是,任何你想要的,但不認爲你需要分開你的類和你的接口。在許多情況下,最好將它們保存在同一個包/目錄中。