关于java包_关于Java包
關(guān)于java包
我希望大家都同意,類的方法應(yīng)該很小,并且只有很少的依賴關(guān)系。 這種觀點(diǎn)被廣泛接受,而對(duì)“小”的解釋則各不相同。 關(guān)于這一點(diǎn)有很多文獻(xiàn)。 但是包裹呢?有些人將包視為名稱空間。 因此,包僅僅是允許您為類重用名稱的東西!
幾年前,我對(duì)方法進(jìn)行了思考:只是用于可重用代碼的容器。
今天,我不同意這兩種說(shuō)法。 方法是命名事物,將事物與其余事物分開的非常重要的工具,即使僅被調(diào)用一次也是如此。
同樣,即使我們忽略名稱問題,軟件包也起著重要的作用。 軟件包將某些功能捆綁在一起。 他們?yōu)樵摴δ苊?#xff0c;應(yīng)該對(duì)其進(jìn)行封裝,以便我們重新使用它。 就像方法一樣,程序包應(yīng)具有單一目的。 它可能比方法的目的“更大”,但它仍然應(yīng)該只做與該目的直接相關(guān)的事情。
不幸的是,在許多項(xiàng)目中,效果并不理想。
這是一個(gè)挑戰(zhàn)。 從當(dāng)前項(xiàng)目中隨機(jī)選擇一個(gè)軟件包。 對(duì)于此軟件包,請(qǐng)回答以下問題
- 該軟件包的目的是什么? 請(qǐng)使用一個(gè)簡(jiǎn)單的句子。 這句話與包裹名稱相符嗎?
- 遍歷該程序包的類,它們是否都共同努力以達(dá)到該類的目的? 還是那里偶然出現(xiàn)的課程?
- 遍歷系統(tǒng)的所有其他類。 他們都不關(guān)心包裹的單一用途嗎? 還是有一些類在您應(yīng)該查看的包中真正浮動(dòng)的其他地方?
- 如果您在下一個(gè)項(xiàng)目中的同事需要基本相同的軟件包,那么從您的代碼庫(kù)中提取該軟件包并將其構(gòu)建為獨(dú)立的jar將有多困難?
以我的經(jīng)驗(yàn),上述問題的答案很可能令人沮喪。 他們肯定參與了我合作過的大多數(shù)項(xiàng)目。
即使該項(xiàng)目中的類和方法合理干凈。
這是為什么?
我認(rèn)為原因是程序包的問題不如方法或類明顯。 如果某個(gè)方法跨越整個(gè)監(jiān)視器,則您每次都會(huì)看到使用該方法的所有時(shí)間。 而且由于該方法很長(zhǎng),因此可能需要做很多工作。 類相同。 但是跟套餐不同。 我花了一整天的時(shí)間編寫代碼,卻不看包裝里面的東西。 我使用快捷方式和基于名稱的搜索打開類,而無(wú)需查看包內(nèi)部。
因此,您不會(huì)注意到與完全不同的問題相關(guān)的類放在一個(gè)包中。 您不會(huì)注意到包中的類數(shù)超過了任何合理的閾值。
如果涉及到最后一個(gè)問題,那么關(guān)于依賴關(guān)系的問題將變得非常丑陋。 軟件包還依賴其他哪些軟件包? 哪個(gè)類包含該依賴項(xiàng)? 對(duì)于此類問題的工具支持非常有限。 而且問題只會(huì)在項(xiàng)目后期才問到,也許是當(dāng)產(chǎn)生了一個(gè)姊妹項(xiàng)目時(shí),該項(xiàng)目應(yīng)該重用一些代碼庫(kù),因此應(yīng)該在一個(gè)通用的基礎(chǔ)項(xiàng)目中移動(dòng)。
由于我去過幾次,所以我建議在項(xiàng)目開始時(shí)使用JDepend或Dependency Finder進(jìn)行一些測(cè)試:
- 包之間沒有循環(huán)依賴
- 每個(gè)包的最大類數(shù)
- 固定的命名架構(gòu),例如<domain>。<project>。<module>。<layer>。<package-of-package-name>
- 模塊之間的依賴關(guān)系的固定方向(模塊是垂直切片,通?;谀承┯蚋拍?#xff09;
- 層之間的依賴關(guān)系的固定方向(gui,表示,域,持久性是典型示例)
但請(qǐng)注意:這些測(cè)試往往很難保持滿意。 但是,如果您付出額外的努力來(lái)保持程序包的清潔,則會(huì)對(duì)應(yīng)用程序結(jié)構(gòu)產(chǎn)生重大的積極影響。
參考: 關(guān)于 Schauderhaft博客上JCG合作伙伴 Jens Schauder的軟件包 。
翻譯自: https://www.javacodegeeks.com/2012/05/about-java-packages.html
關(guān)于java包
總結(jié)
以上是生活随笔為你收集整理的关于java包_关于Java包的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 电脑怎么访问小米路由器存储小米路由器如何
- 下一篇: 如何使用插件生成自定义Java 8代码