2014-04-29 38 views
2

[這是不是23247951重複]如何組織java包正確

我也許做了太多的包,有些是深如,例如,mightypork.gamecore.control.events.input

大多數情況下它很好,但有時我不確定我是否做得對。下面是一個例子形象:

enter image description here

Tile.javaTileRenderer.java屬於成tile包,因爲它們是「頂級」抽象或界面,或進入子包,因爲實現都在那裏?我希望這個結構是合乎邏輯的,但是我真的不確定。請注意,這只是一個例子,我至少在十幾個地方處於類似的情況。

更一般地說,是否只是爲了具體實現某些東西而創建子包是一種很好的做法?

+1

難以確定,但您經常發現比'mightypork.gamecore.control.events.input'更深的層次結構,並且接口/實現通常是包豐富的源泉。 –

+0

是的,我知道。另外,更好的例子可能是'mightypork.util.math.constraints.num.caching' ..無論如何,我主要問的是第二部分的內容。 – MightyPork

+2

不會http://programmers.stackexchange.com/更適合這個問題嗎? –

回答

5

如果您定義了包,請嘗試考慮模塊性。哪些類型可以解決您的軟件的一個方面,組成一個界限清晰的模塊?哪些其他類型定義了另一個依賴於其他模塊的模塊? Java縫中的包是分層的,但它們不是。永遠不要少,讓子包只依賴於超級包,永遠不要相反。具有不依賴於超級包的子包是可以的。並且不要創建像all my DAOsall my Controllers這樣的技術包。包裝的一個主要驅動因素是包裝內部類型的程度cohesion。另一個是你的應用程序的分層。

我的方法是:首先將所有東西放入一個包中。當您的應用程序發展時,識別模塊並重新打包。儘量保持軟件包之間的依賴性較低。檢查相同包中的任何一種類型是否相互依賴,或者它們是否處理相同的方面/共享相關責任。

+2

從實際的角度來看,這聽起來是正確的......但是然後我將在包資源管理器中有一個類的怪物列表,而嵌套包看起來更乾淨(但不太有用?)。 – MightyPork

+1

*「儘管包(內部類型間)依賴關係高」部分應該被刪除。依賴關係沒有任何好處。 –

+0

我將_high_更改爲_exist_以解決內聚。 – Harmlezz

1

好吧。這是一種觀點,所以它可能因人而異。是的,將抽象類/接口和具體類放在同一個包中並不好。通過查看你的軟件包,任何人都應該能夠說DoorTile,FloorTile等所有的實現/擴展瓷磚。所以,它們被歸入同一個包中。所有的抽象類/接口可以分組在一個單獨的包中。

1

更一般地說,爲某個具體的東西做一個子包是否是一個好的做法?

國際海事組織,這決定取決於接口是多麼普遍,即是否有可能和很可能你會寫一個不同的接口實現?如果是 - 那麼最好爲這些不同的impls提供一個單獨的包 - 如果單個默認impl就足夠了,那麼我將把接口和Impl放在一起放在同一個包中。