a已經寫了一個Java EE 6 web應用程序,這真的是我編寫的第一個嚴重應用程序。我已經注意到我的課程大到500到1000,可能會變得更大。我不知道一個班級應該有多大,或者是否一切都很重要,但如果它會對應用程序的性能造成負面影響,我不想繼續寫下巨大的類。你對我有什麼建議?什麼是建議的課程大小?
回答
「類的第一條規則是它們應該很小,類的第二條規則是它們 應該小於那個。」
類的名字應該描述它履行了什麼責任。實際上,命名 可能是幫助確定班級規模的第一種方法。如果我們無法得出一個簡明的 名稱,那麼它可能太大了。班級名稱越模糊,越有可能承擔過多的責任。例如,類別名稱包括處理器或經理或超級等狡猾詞 經常暗示不幸聚合 責任。
我們也應該能寫之類的約25個字, 簡要說明不使用「如果」的話「和」,「或」,或「但是」。如何將我們所描述的 SuperDashboard? 「SuperDashboard可以訪問上次持有 重點的組件,並且它還允許我們跟蹤版本和內部版本號。」第一個「and」是 ,暗示SuperDashboard有太多的責任。
我們希望我們的系統由許多小類組成,而不是幾個大類。每個小類都包含一個單一的責任,有一個單一的理由來改變,並與其他幾個人合作,實現所需的系統行爲。
COHESION =類應該有少量的實例變量。類 中的每個方法都應該操縱這些變量中的一個或多個。通常,方法 處理的變量越多,該方法對其類的內聚性越強。每個方法使用的每個變量爲 的類都是最大程度上內聚的。 一般來說,既不可能也不可能建立這樣的極大聚合性的類;另一方面,我們希望凝聚力高。當內聚性很高時, 意味着類的方法和變量是相互依賴的並且作爲邏輯整體掛起在一起。
- 從清潔代碼:敏捷 軟件工匠
非常感謝。你的回答非常詳盡,向我介紹了我不知道的新概念。我想我必須重構,看看需要移到哪裏 – qualebs 2013-05-03 08:47:42
一般來說,我會盡可能堅持不超過一頁的方法。所以說一個方法是50行+評論,一個大的方法順便說一句,所以這意味着你可能有500行中的6個方法。我懷疑你有超過一頁的方法,這使得你的課程非常龐大。
正如其他人所提到的,代碼質量會受到更大的類獲得。我會看到有多少代碼可以進入抽象類,或者是作爲這些其他類的一部分引用的較小類。
這就是說,有時它不容易有一個小班。但是,如果你所有的課程都很大,你可能不會利用抽象類,聚合等。
我認爲基於代碼行數量的類的大小是否是一個模糊的指標應該被分解。
但是,我們應該總是嘗試編寫最少數量的類和方法。這是因爲小東西更容易理解 - 但如果有太多(雖然完全可以理解)的作品,您將無法看到整個畫面。
此外,您需要注意的JVM上存在一些限制,例如解釋爲in this article的方法大小。
您應該刪除不再需要的方法(或者可能只是因恐懼而添加的方法)。如果不使用代碼,則它的值小於零。一個班級應該有唯一一個明確界定的責任。如果你的班級有/有/做了幾件不同的事情,你打算叫什麼班?
您需要找到合適的平衡點。
- 1. 這是什麼「Log」課程?
- 2. 部分課程是什麼?
- 3. 爲動態大小的ImageButton創建圖像的建議方法是什麼?
- 4. 什麼是對XML建議
- 5. 什麼是最終的內部課程?
- 6. 什麼是「近乎空虛」的課程?
- 7. 什麼是您最重用的課程?
- 8. 爲什麼課程是隻讀的?
- 9. Dart中的課程類型是什麼?
- 10. 什麼是Android程序大小限制?
- 11. 什麼是 - SASS/CSS中的課程是什麼意思?
- 12. MYSQL建議,表大小
- 13. 谷歌課堂課程中的「部分」字段是什麼?
- 14. 什麼是最大的SQL表大小
- 15. 一堂課的大小是多少?
- 16. 什麼是無操作課程?
- 17. 什麼是圖像大小?
- 18. 存儲大量內容的建議方法是什麼?
- 19. 什麼是方法最大線的最新建議?
- 20. 爲什麼不能創建堆棧大小小於默認大小的線程?
- 21. 建議設置最大堆大小還是不是?
- 22. 如何調整ScrollPane的大小 - 我調整了代碼的大小,但沒有調整。有什麼建議麼?
- 23. Android:AsyncTask建議:私人課還是公開課?
- 24. - 建議的最大對象大小應該是多少?
- 25. 爲什麼Chrome審計建議我最大限度地減少Cookie大小?
- 26. 什麼是最好的交互式Python教程?有什麼建議麼?
- 27. 課堂大小限制是多少?
- 28. php調整大小圖像的建議
- 29. 建議memcached的緩存/內存大小?
- 30. 關於總頁面大小的建議
大小的手冊可能不會影響性能,但肯定將使它難以維持的代碼。 – 2013-05-03 04:28:04
如果你的班級是500-1000行,那麼他們太大了。不是從性能的角度來看,而是從代碼質量的角度來看。保持你的課程小而精確。他們應該有一個責任。 – NilsH 2013-05-03 04:29:21
@NilsH - 另一方面,*某些*類不能因爲他們必須做的事而變得簡短和重要。如果你試圖重構他們,他們不能做他們需要做的事情。無可否認,像這樣的類是不尋常的... – 2013-05-03 04:59:29