回答
國際海事組織,這是一件壞事,雖然在可維護性方面不是真正的表演障礙。
缺點是它使得類更難找到,並且它使包名更加冗長。前者在不使用IDE時應用更多。
有人可能會認爲它與「封裝私人」範圍一起有助於模塊化。但是相反,你也可以爭辯說,過度包裝實際上是相反的;即強迫你使用public
,如果你不那麼細緻/迂腐,你就不必這樣做。
這當然是主觀的,但我通常更喜歡用他們至少包含3-4班但不超過13-15的方式來決定我的包裹。它讓理解變得更好,同時不會混淆項目。儘管如此,對於其他人可能會有所不同。 如果一個包裝增長超過13-15個班級,一個子包裝要求出現。
我認爲細粒度的包裝結構是件好事。主要原因是它可以幫助減少你的依賴。但要小心......如果你把事物分解得太多而實際上屬於一起,那麼你最終會得到循環依賴!作爲一個經驗法則,我通常在包中有一個接口(或一組相關的接口)。在子包中,我將實現這些接口(而不是將所有實現都放在同一個包中)。這樣一個客戶端可以僅僅依賴於感興趣的接口和實現...而不是所有其他他們不需要的東西。
希望這會有所幫助。
最終在一個特定包中的實際數量類型並不重要。這是你如何到達你的包裝結構。 (「什麼」而不是「如何」,本質上是「公共」API),耦合(包對其他包的依賴程度)和內聚性(如何相互關聯是一個包中的功能)更重要。
包裝設計(大部分來自Uncle Bob)的一些準則,例如:
- 軟件包應該形成可重複使用和釋放模塊
- 包裝應側重於良好的可重用性
- 避免包 之間循環依賴
- 軟件包應該僅僅取決於變化較少的軟件包
- 軟件包的抽象應該在proportio中n以及其變化的頻率
不要試圖從頭開始充實整個包結構(您並不需要它)。相反,讓它經常進化並重構。查看Java源代碼的import
部分,以獲取有關移動類型的靈感。不要被僅包含一個或幾個類型的包分散注意力。
從頭開始編寫程序時,我的方法是開始根包(com.example.app1)中的所有類。當有一定數量的相關類別「做一件事情」是創建一個包的時候。經過一段時間的開發後,輔助類可以轉到通用包(例如com.example.app1.misc,com.example.app1.utils)以卸載根包。
所以我儘量保持清潔的根包。
細粒並不差,但正如其他人所說,經常重構會產生緊湊的包裝結構。
包是一個封裝單元。
理想情況下,它通過接口公開一個公共API並隱藏包私有類中的實現細節。
包的大小因此是實現公共API所需的類的數量。
還有一個神奇的數字7 +/- 2.在生理範圍內,已經表明這是我們理解一組給定事物的基本限制。在我們的大腦需要開始交換之前,我們能夠在短時間內保存多少內存和進程。編碼時,我發現這並不是一個糟糕的經驗法則,也就是說,一旦一個軟件包開始超過10個課程,現在是認真思考如何分解它的時候,但是低於5個軟件包是不值得的。也適用於菜單組織等事情。請參閱Millers paper或Google。
- 1. 在構造函數中包裝是好還是壞?
- 2. jQuery Document Ready - 最好是包裝每個語句還是將所有語句包裝在一個document.ready事件中?
- 3. openCV置信度值 - 是好還是壞?
- 4. 讀取結構化數據時是否有比LOAD/NEXT更細的粒度?
- 5. STM是否爲現有數據結構提供細粒度鎖定?
- 6. 後構建提交:好還是壞?
- 7. 我的包裝結構是否正確?
- 8. IDENTITY列 - 好還是壞?
- 9. 多表好還是壞?
- 10. 是一個SQL Server索引B-tree是一個扁平結構還是一個深度結構
- 11. Thickbox - 是否有「已準備好」事件?
- 12. 重構好還是不好?
- 13. 是否有F#事件的構建器?
- 14. 是否有一個良好的IE 6考慮事項庫?
- 15. 這是否有點過分,還是我做正確的事情?
- 16. Ruby是否有一個很好的openCL包裝?
- 17. 是類還是結構體
- 18. tablesorter是否有一個事件?
- 19. 將所有表到一個數據庫 - 好還是壞
- 20. 什麼是細粒度和粗粒度超時
- 21. Javascript和AI,事實還是虛構?
- 22. 默認構造函數是好還是壞?的Checkstyle和PMD是相反這裏
- 23. 「一切都是對象」是好事嗎?
- 24. asp.net - 是否有ajax結束事件?
- 25. 開關盒是一個循環還是一個條件結構?
- 26. 它是一個結構還是一個內部表?
- 27. HTML表單的好還是壞?
- 28. PHP MVC中的BaseModel,好還是壞?
- 29. MySQL上的遊標 - 好還是壞
- 30. 是否有這樣的事,作爲一個「是」查詢