您是否使用任何度量標準來決定代碼(類,模塊,庫)的哪些部分應該被整合或重構?你如何決定代碼的哪個部分應該被整合/重構?
回答
我不使用任何可以自動計算的指標。
我使用code smells和類似的啓發式來檢測錯誤的代碼,然後我會立即修復它,只要我注意到它。我沒有任何檢查問題的清單 - 大多數人都覺得「這段代碼看起來很亂」,然後推斷爲什麼它很混亂並找出解決方案。簡單的重構,比如給一個變量賦一個更具描述性的名字或者提取一個方法只需要幾秒鐘。更強化的重構,比如提取一個類,可能需要花費一兩個小時的時間(在這種情況下,我可能會留下一個TODO註釋並在稍後重構它)。
我使用的一個重要啓發是Single Responsibility Principle。它使這些類很好地結合在一起。在某些情況下,我使用代碼行中的類的大小作爲啓發式,以便更仔細地查看一個類是否有多重責任。在我的current project中,我注意到在編寫Java時,大多數類的長度都不會超過100行,而當大小接近200行時,類會執行許多不相關的事情,並且可能會將其分開,因此以獲得更有針對性的凝聚力課程。
我們使用Cyclomatic_complexity來標識接下來需要重構的代碼。
我使用Source Monitor,並且在複雜性度量值超過8.0時常規重構方法。
每次我需要添加新功能時,我都會搜索已經存在的類似的代碼。一旦我找到這樣的代碼,我想重構它來解決原來的任務和新的任務。當然,我不打算每次重構 - 我經常重複使用代碼。
我通常只重構「按需」,即如果我看到代碼的具體的直接問題。
通常當我需要實現新功能或修復一個bug,我發現代碼目前的結構,使這個困難,如:
- 太多的地方,因爲複製&粘貼的改變
- 不合適的數據結構
- 硬編碼的東西需要改變
- 方法/班太大理解
然後我會重構。
我有時會看到似乎存在問題的代碼以及我想要更改的代碼,但是如果該區域目前尚未處理,我就會抵制這種衝動。我看到重構是未來驗證代碼和做不真正產生任何即時價值的事情之間的一種平衡。因此,除非我看到具體的需求,否則我通常不會重構。
我想聽聽那些重構作爲日常事務的人的經驗。你如何阻止自己拋光以至於你失去了重要功能的時間?
- 1. 如何從List Set中決定應該使用哪個集合?
- 2. 你會如何重構這段代碼?
- 3. 你會如何重構這段代碼?
- 4. 你如何決定使用哪個ORM?
- 5. 重複的JavaScript部分 - 如何整合?
- 6. 我應該在哪些部分放置我的SqlDataReader代碼?
- 7. 哪些代碼我應該放入軌道中的部分
- 8. 你如何構建你的jQuery代碼?
- 9. 如何解決功能分支中的切向重構代碼
- 10. 我該如何重構這段代碼?
- 11. 你如何重構你的舊PHP代碼?
- 12. 我應該重構這段代碼嗎?
- 13. 一個結構代碼應該如何在有兩個分支時分支到
- 14. HUDSON_HOME的哪個部分應該置於源代碼控制之下?
- 15. 你會如何重構這個LINQ代碼?
- 16. 如何部分構建Android源代碼?
- 17. 如何確定Java代碼的哪部分需要同步?
- 18. 我該如何重構這個簡單的Ruby代碼片段?
- 19. 我應該如何決定哪個類負責對象創建?
- 20. 哪些代碼應該去哪裏在MVC結構
- 21. 你應該在遊戲中首先執行哪些部分?
- 22. 你應該向GitHub提交不可構建的代碼嗎?
- 23. CSS代碼結構決定
- 24. 如何使用引用的部分應用程序重構代碼?
- 25. 如何重複部分代碼?
- 26. Throwable的哪個子類應該被捕獲,哪些不應該?
- 27. 如何確定要查看哪些代碼部分?
- 28. 你應該如何組合類成員的哈希碼?
- 29. 我應該如何重構這個?
- 30. 我該如何重構這個jQuery代碼?
有時候這很簡單 - 這個代碼太複雜了,每次我去修改它都會嚇到我。 – cgp 2009-04-13 10:32:22