When is a function too long?是這個問題的一個子集,我想。什麼時候課時太長?
確定班級時間過長的幾個很好的指標是什麼?
我重新爲外部承包商的項目重新制定了一套代碼驗收準則,並意識到我以前沒有涉及過這個問題,但應該在將來討論這個問題。
When is a function too long?是這個問題的一個子集,我想。什麼時候課時太長?
確定班級時間過長的幾個很好的指標是什麼?
我重新爲外部承包商的項目重新制定了一套代碼驗收準則,並意識到我以前沒有涉及過這個問題,但應該在將來討論這個問題。
當它有多個責任。
讓我引用羅伯特·C·馬丁的Clean Code這裏:
類的第一條規則是,他們應該是很小的。第二類規則是它們應該小於這個規則。 ...用 函數我們通過計算物理線來測量大小。有了課程,我們 使用不同的措施。我們計算責任。 [第10章,第136頁]
+1頂部答案先生。 – Matt 2010-02-08 16:10:46
這顯然不是真的。你有沒有使用CRC(班級,責任,合作者)卡片 - 在面向對象設計中使用的經典工具之一?每張卡片都有一個單獨的類別和一系列重要的職責。 – 2010-02-08 16:19:44
@Neil,我認爲從80年代開始的OO設計方法並沒有包含從那以後獲得的大量經驗。這些卡的概念似乎仍然有用,所以感謝您提及它們! – Thorsten79 2010-02-08 16:22:46
一類應該只有一個責任。這是一個比它的長度更好的衡量標準。所以,在設計你的代碼時,你的設計的每個單元(一個類型或一個類)只應該對一件事負責(不管你的情況是「一件事」)。 如果你儘可能簡單,你不會陷入混亂。
當你認爲現在對你來說管理它變得越來越困難並且讓你陷入困境。
我正在試圖爲他人遵循一個標準;我有幾個3000+的線上課,雖然我想向他們解釋這是一個糟糕的主意,但我正在設定規則,以防止我在將來扮演支持者的角色。 – 2010-02-09 15:33:15
忽略正在使用的設計模式,我會考慮班級實現的責任範圍。如果範圍太大,應該將其分解爲具體的職責,抽象出來,或者更通用。
我實際上不會將行數作爲有意義的度量。
一點也不擔心「代碼行」作爲度量標準,只是試圖找到更有意義的度量標準來取代它。 – 2010-02-09 15:34:07
不超過17行。沒有更多,不少。所以如果是17線以下的話回車就會訣竅。如果超過17個,您需要從該函數內開始調用其他函數。
例如:
public function myFunction() {
...
line 17: myFunctionPart2();
}
public function myFunctionPart2() {
...
line 17: myFunctionPart3();
}
等。
它非常標準的編程習慣。
類扇出複雜度:給定類依賴的其他類的數量。此外,這個平方至少表示功能程序(以文件爲基礎)所需的維護量。
環複雜度:檢查圈指數的複雜性是否超出指定限制。複雜性是通過if,while,do,for,?,catch,switch,case語句和運算符的數量來衡量的。 (加一)在構造函數,方法,靜態初始值設定項或實例初始值設定項的主體中。它是通過源的可能路徑的最小數量的度量,因此是所需測試的數量。一般認爲1-4是好的,5-7好,8-10考慮重新分解,現在11+重新考慮因素!
回顧今年以後;圈複雜度是一個很好的一階近似,但僅測試每個單獨的方法,並且通常是一個紅鯡魚;它正在測量代碼難度,但是你真正想知道的是在那裏有多少難度。 (如果原因很複雜,編寫複雜的代碼是可以的;如果中間複雜的代碼很簡單,編寫代碼就不好!) – 2015-07-12 04:59:45
什麼語言?我認爲Java和Scala的答案不同。在後一種情況下,班級通常(並應該!)縮短。 – 2010-02-08 16:00:38
看看這個問題 - http://stackoverflow.com/questions/849557/in-c-how-many-lines-before-a-class-should-be-consider-to-be-re- exored/ – 2010-02-08 16:04:00
密切關注相關問題:http://stackoverflow.com/questions/1086851/good-practice-class-line-count/1086865#1086865 – sleske 2010-02-09 08:59:49