你什麼時候開始考慮一個代碼庫變得太大和笨拙?什麼時候代碼庫變得龐大而笨拙?
回答
當它超過100行。玩笑。這可能是最難回答的問題,因爲它非常個人化。
但是,如果你很好地構建應用程序併爲接口,數據,服務和前端使用不同的層,你將自動獲得一個很好的「基礎」結構。然後,您可以將每個圖層分爲不同的類,然後在類內指出該類的適用方法。
但是,沒有「每個方法的行數x是不好的」,但是更像這樣,如果存在複製的可能性,則將其從當前peice中分離出來並使其可重用。
重複使用代碼是所有良好結構的基礎。
分裂成不同的層將有助於基地變得越來越靈活和模塊化。
簡答:取決於項目。
龍答:
代碼庫不必爲大的笨拙 - 意大利麪條代碼可以從第1行寫那麼,真的不是從好到壞的一個魔術跳變點 - 這是更多的一個偉大的頻譜--->可怕的,它需要每天的努力,以防止你的代碼向錯誤的方向前進。您通常需要的是一名主要開發人員,他能夠客觀地查看其他人的代碼,並且始終關注代碼的架構和設計 - 沒有一個開發人員可以做到這一點。
- 當大量的編碼時間專注於「我在哪裏放這個代碼?」
- 當關於副作用的推理開始變得非常困難時。
- 當有這只是「在那裏」的代碼顯著量,沒有人知道它做什麼,或者如果它仍在運行,但它太嚇人刪除
- 當很多團隊成員花顯著塊他們的時間追逐間歇性的錯誤,這些錯誤是由於數據中某處不存在某些空字符串而引起的,或者您認爲某些事情通常會在寫得很好的應用程序中被捕獲,在某些邊緣情況下
-when,in考慮如何實現一項新功能,「完全重寫」開始看起來像是一個很好的答案
- 當你害怕看着你需要維護的代碼混亂,並希望你可以找到工作建立一些乾淨和合乎邏輯的工作,而不是通過其他人的組織不佳的思想潛入垃圾箱
如果這是一些可計算的指標你在尋找什麼。靜態代碼分析工具可以提供幫助的:
這裏有一個列表:http://checkstyle.sourceforge.net/config_metrics.html
其他因素可能都需要改變/補充一下的時間。
其他非可計算的因素可以
- 相關的變化
- 的功能水平交織的風險。
- 如果文檔可以跟上功能/代碼
- 如果文檔代表應用程序。
- 需要的培訓水平。
- 重複的數量而不是重用。
我會把#1的變化風險。如果您害怕添加或更改功能,因爲其他所有功能都會中斷,那麼您的代碼變得太笨重。 – 2008-12-03 16:19:03
當我不記得一個班級做了什麼或者其他什麼班級使用了我的頭頂。這實際上更多的是我的認知能力和代碼複雜度的函數。
啊,上帝的程序反模式。
當你不記得至少 的大綱部分。
當您必須考慮如何更改 會影響其本身或 依賴關係。
當你不記得所有 它取決於或取決於 。
何時需要超過幾個 分鐘(?)下載源或編譯 。
當您不必擔心如何部署新版本的 。
當您遇到類別 與其他 功能相同的類在應用程序的其他地方。
這麼多可能的跡象。
如果經過多年的發展,不同的人代碼變更請求和錯誤修復,你遲早會得到部分代碼重複功能,非常類似的類,一些意大利麪條等。 這主要是由於修復需要快速,「新人」不知道代碼庫。所以他很高興地將已經存在的東西編碼。
但是,如果你有自動檢查的地方檢查風格,單元測試代碼覆蓋率和類似,你可以避免一些。
甚至比自動檢查更有代碼審查 - 因爲他們會實際*教導*新人如何正確執行,而不是在事後糾正它們。 – 2008-12-03 16:37:14
我認爲有很多想法,爲什麼一些代碼庫太大。
- 很難保持恆定的命名約定。如果類/方法/屬性不能一致地命名或者不能一致地找到,那麼是時候重新組織了。
- 當你的程序員在瀏覽網頁並去吃午飯來編譯時。將編譯/鏈接時間保持在最低限度對於管理非常重要。你想要的最後一件事是一個程序員通過拖動他們的拇指太久而分心。
- 當小的變化開始影響許多其他許多地方的代碼。代碼合併有一個好處,但也有成本。如果修改一個錯誤的小改動會導致十多個錯誤,並且這通常會發生,那麼您的代碼庫需要分散(版本化庫)或可能未合併(是,重複代碼)。
- 如果新程序員對項目的學習曲線明顯長於可接受的時間(通常爲90天),那麼您的代碼庫/培訓設置不正確。
..還有很多很多,我敢肯定。如果你從這三個角度思考:
- 難以支持?
- 難以改變嗎?
- 難學嗎?
...然後你會如果你的代碼符合「大而笨重」的範疇
我試圖想在決定根據你的同事如何看待它是一種方式有一個想法。
在幾年前的演出第一週,我說在站立期間我一直在跟蹤ContainerManagerBean,ContainerManagementBean和ContextManagerBean周圍的白兔子(這讓我不寒而慄,想起了這些話! )。至少有兩位開發人員看着他們的鞋子,我可以看到他們保持着笑容。
就在那裏,我知道這不是我對代碼庫不熟悉的問題 - 所有開發人員都認爲它存在問題。
許多人認爲的問題並不是真的與代碼庫的原始大小有關,而是它的易理解性。大小與可理解性有何關係?如果有...
我見過很短的程序,只是一團糟 - 從頭開始更容易丟棄和重做。我還看到了非常大的程序,其結構足夠透明,即使在逐步更詳細的視圖中也可以理解。而且之間的一切......
我認爲從整個代碼庫的角度來看這個問題是一個好的方法,但是從底層開始着眼於單個類的可理解性可能是值得的,多類組件,子系統以及最終整個系統。我希望在每個細節層面上的答案都可以相互構建。
對於我的錢來說,最簡單的基準是這個:你能解釋X在一個句子中做什麼的本質嗎?其中X是組件的某個粒度,並且您可以假設理解組件上方和下方的級別。
當你需要一個實用方法或類,並且不知道其他人是否已經實現它或想知道在哪裏尋找一個。
相關:當存在幾個稍微不同的相同功能的實現時,因爲每個作者都不知道其他作者的工作。
對於我來說,當已經有很多並沒有計劃當計劃最初書面或最後顯著重構該代碼庫進行更改的代碼變得笨重。在這一點上,爲了方便起見,東西開始適合現有的代碼庫,並開始獲得大量的設計工件,只有知道實現的歷史時纔有意義。
- 1. 我的C代碼太笨拙
- 2. ASP.NET MVC單元測試 - 假庫已變得笨拙
- 3. 合併時爲什麼會變得笨拙?我怎樣才能使拉/合併更改變得更簡單?
- 4. 我們如何處理共享/弱ptr而不會使代碼變得龐大?
- 5. 爲什麼Android的源代碼這麼龐大?
- 6. MSSQL處理線返回而笨拙
- 7. 什麼時候變得關係
- 8. 什麼時候變得更好?
- 9. 如何處理無證代碼的龐大代碼庫?
- 10. 什麼時候不用開源代碼?
- 11. 什麼時候重構代碼?
- 12. 按鈕在小屏幕上變得笨拙
- 13. 添加文字笨拙地改變按鈕的大小?
- 14. 什麼時候web.config太大?
- 15. 爲什麼通過使用選擇器$(':dragged')使得拖動動作變得笨拙?
- 16. 有什麼好處,什麼時候在笨
- 17. JQuery的SmoothDivScroll工作笨拙
- 18. 你什麼時候說代碼是遺留代碼?
- 19. 重構在什麼時候變得不值得?
- 20. 變量變量:什麼時候有用?
- 21. 變量在什麼時候變化?
- 22. Java:如何編譯一個龐大的源代碼龐然大物
- 23. 什麼時候使用大O而不是theta或小o
- 24. 什麼時候通常喜歡小O而不是大O?
- 25. 什麼時候PHP Web應用程序變得太大,一般的Web主機
- 26. 什麼時候jQuery.active值得到重置?
- 27. 什麼時候QLC效率低得多?
- 28. 什麼時候值得壓縮ViewState?
- 29. AEM表格 - 什麼時候值得?
- 30. 什麼時候贏得Netfix獎?
我唯一要補充的是「或者當它開始有這種感覺。」在你有足夠的經驗處理好代碼和錯誤代碼之後,你可以很容易地確定代碼的相對健康狀況。只有它需要的複雜程度?它有很多代碼味道?有清晰的設計嗎? – 2008-12-03 16:09:46