給C#開(kāi)發(fā)者的代碼審查清單
這是為C#開(kāi)發(fā)者準(zhǔn)備的通用性代碼審查清單,可以當(dāng)做開(kāi)發(fā)過(guò)程中的參考。這是為了確保在編碼過(guò)程中,大部分通用編碼指導(dǎo)原則都能注意到。對(duì)于新手和缺乏經(jīng)驗(yàn)(0到3年工作經(jīng)驗(yàn))的開(kāi)發(fā)者,參考這份清單編碼會(huì)很幫助。
清單
1. 確保沒(méi)有任何警告(warnings)。
2.如果先執(zhí)行Code Analysis(啟用所有Microsoft Rules)再消除所有警告就更好了。
3. 去掉所有沒(méi)有用到的usings。編碼過(guò)程中去掉多余代碼是個(gè)好習(xí)慣。(參考:msdn)
4. 在合理的地方檢查對(duì)象是否為’null’,避免運(yùn)行的時(shí)候出現(xiàn)Null Reference Exception。
5. 始終遵循命名規(guī)范。一般而言變量參數(shù)使用駝峰命名法,方法名和類(lèi)名使用Pascal命名法。(參考:msdn)
6. 請(qǐng)確保你了解SOLID原則。
根據(jù)維基百科定義:在程序設(shè)計(jì)領(lǐng)域,SOLID (單一功能、開(kāi)閉原則、里氏替換、接口隔離以及依賴(lài)反轉(zhuǎn)) 是由羅伯特·C·馬丁在21世紀(jì)早期引入的記憶術(shù)首字母縮略字,指代了面向?qū)ο缶幊毯兔嫦驅(qū)ο笤O(shè)計(jì)的五個(gè)基本原則。當(dāng)這些原則被一起應(yīng)用時(shí),它們使得一個(gè)程序員開(kāi)發(fā)一個(gè)容易進(jìn)行軟件維護(hù)和擴(kuò)展的系統(tǒng)變得更加可能。SOLID所包含的原則是通過(guò)引發(fā)編程者進(jìn)行軟件源代碼的代碼重構(gòu)進(jìn)行軟件的代碼異味清掃,從而使得軟件清晰可讀以及可擴(kuò)展時(shí)可以應(yīng)用的指南。SOLID被典型的應(yīng)用在測(cè)試驅(qū)動(dòng)開(kāi)發(fā)上,并且是敏捷開(kāi)發(fā)以及自適應(yīng)軟件開(kāi)發(fā)的基本原則的重要組成部分。參考:wiki/SOLID_(面向?qū)ο笤O(shè)計(jì))
7. 代碼可重用性:如果一塊代碼已經(jīng)被使用超過(guò)一次,或者你希望將來(lái)使用它,請(qǐng)?zhí)崛〕梢粋€(gè)方法。將重復(fù)的工作做成通用的方法放在相關(guān)的類(lèi)中,這樣一旦你完成別人就可以使用了。將常用功能開(kāi)發(fā)成用戶(hù)控件,這樣可以跨項(xiàng)目重用它們。(參考:① 、 ②)
8. 代碼一致性:比方說(shuō),Int32寫(xiě)成int,String寫(xiě)成string,應(yīng)該在代碼里保持統(tǒng)一形式。不能一會(huì)二寫(xiě)成int一會(huì)兒寫(xiě)成Int32。
9. 代碼可讀性:代碼應(yīng)該是可維護(hù)的,便于其他開(kāi)發(fā)者理解。(參考:msdn)
10. 釋放非托管資源,比如文件I/O,網(wǎng)絡(luò)資源等。一旦使用結(jié)束就應(yīng)該釋放它們。如果你想一旦超出使用范圍就自動(dòng)釋放對(duì)象,可以使用usings將非托管代碼括起來(lái)。參考:msdn
11. 合理實(shí)現(xiàn)異常處理(try/catch和finally塊)和異常記錄。參考:msdn
12. 確保代碼中方法的行數(shù)不要過(guò)多,不超過(guò)30到40行。
13. 及時(shí)用代碼管理工具check-in/check-out代碼。(比如TFS) 參考:codeproject.com
14. 相互審查代碼:和你的同事交換代碼,實(shí)現(xiàn)內(nèi)部審查。
15. 單元測(cè)試:編寫(xiě)開(kāi)發(fā)測(cè)試用例完成單元測(cè)試,確保代碼被送到QA以前,基本測(cè)試完成。參考:msdn
16. 盡量避免for/foreach循環(huán)嵌套和if條件嵌套。
17. 如果代碼只會(huì)使用一次,請(qǐng)使用匿名類(lèi)型。參考:msdn
18. 盡量使用LINQ查詢(xún)和Lambda表達(dá)式,增加可讀性。參考:msdn
19. 合理使用var、object和dynamic關(guān)鍵字。由于很多開(kāi)發(fā)者會(huì)感到困惑或者知道的很少,會(huì)覺(jué)得它們有些相似,故而交換使用,這是要避免的。參考:blogs.msdn
20. 使用訪問(wèn)限定符(private, public, protected, internal, protected internal)限定每個(gè)方法、類(lèi)或變量的需要范圍。比方說(shuō)如果一個(gè)類(lèi)只會(huì)在程序集內(nèi)使用,那么定義成internal就足夠了。參考:msdn
21. 在需要保持解耦的地方使用接口,有些設(shè)計(jì)模式的出現(xiàn)也是由于接口的使用。參考:msdn
22. 按照用法和需要將類(lèi)定義為sealed、static或abstract。參考:msdn
23. 如果需要多次串聯(lián),請(qǐng)使用Stringbuilder代替string,這可以節(jié)省堆內(nèi)存。
24. 檢查是否有不可能執(zhí)行的代碼,如果有,請(qǐng)修改。
25. 在每個(gè)方法前注釋?zhuān)f(shuō)明它的用法、輸入類(lèi)型和返回值類(lèi)型信息。
26. 使用類(lèi)似Silverlight Spy的工具,檢查和操控Silverlight應(yīng)用在運(yùn)行時(shí)對(duì)XMAL的渲染,以此來(lái)改善效率。這可以在設(shè)計(jì)執(zhí)行XAML時(shí),節(jié)省大量退回和來(lái)回修改的時(shí)間。
27. 使用filddler工具通過(guò)檢查HTTP/網(wǎng)絡(luò)流量和帶寬,來(lái)跟蹤web應(yīng)用和服務(wù)的性能。
28. 如果你想確認(rèn)Visual Studio以外的方法,請(qǐng)使用WCFTestClient.exe工具,或者裝載它的進(jìn)程到Visual Studio來(lái)進(jìn)行調(diào)試。
29. 在任何合理的地方使用constants和readonly。參考:/msdn、msdn
30. 盡量避免強(qiáng)制轉(zhuǎn)換和類(lèi)型轉(zhuǎn)換,因?yàn)闀?huì)造成性能損失。參考:msdn
31. 對(duì)于你想提供自定義信息的類(lèi),請(qǐng)重載ToString(來(lái)自O(shè)bject類(lèi))。參考:msdn
32. 避免直接從其他代碼中ctrl+c/ctrl+v。一直建議還是自己用手敲,即使你已經(jīng)找到相關(guān)代碼。這樣可以鍛煉自己寫(xiě)代碼能力,還能正確理解那段代碼的用法。最終你永遠(yuǎn)都不會(huì)忘記那段代碼。
33. 保持閱讀書(shū)籍和文章的良好習(xí)慣,遵循大神們的實(shí)踐指導(dǎo)。(比如微軟專(zhuān)家和一些著名的專(zhuān)家,Martin Fowler, Kent Beck, Jeffrey Ritcher, Ward Cunningham, Scott Hanselman, Scott Guthrie, Donald E Knuth.)
34. 確認(rèn)代碼是否有內(nèi)存泄漏。如果有,請(qǐng)確保已修正。參考:blogs.msdn.com
35. 盡可能參加專(zhuān)家們組織的技術(shù)研討會(huì),可以接觸到最新的軟件趨勢(shì)、技術(shù)和最佳實(shí)踐
36. 要透徹理解OOP概念,并盡可能在代碼里實(shí)現(xiàn)。
37. 知道項(xiàng)目設(shè)計(jì)架構(gòu),可以從整體上理解程序的執(zhí)行流程。
38. 采取必要措施阻止避免任何交叉腳本攻擊、SQL注入和其他安全漏洞。
39. 永遠(yuǎn)記得將保密和敏感信息加密(通過(guò)使用好的加密算法),比如保存到數(shù)據(jù)庫(kù)的密碼和保存在web.config文件中的連接字符,要避免被非認(rèn)證的用戶(hù)操縱。
40. 避免對(duì)已知類(lèi)型(原始類(lèi)型)使用默認(rèn)關(guān)鍵字,比如int, decimal, bool等。多數(shù)情況下,如果不確定是值類(lèi)型還是引用類(lèi)型,就使用泛型類(lèi)型(T)。參考:msdn
41. 微軟(在代碼分析條例和指導(dǎo)中)并不推薦使用’out’和’ref’,這些關(guān)鍵字是通過(guò)引用傳參,請(qǐng)注意,’ref’參數(shù)在傳入被調(diào)用方法之前,應(yīng)當(dāng)在調(diào)用方法中先初始化,但’out’參數(shù)就不是這樣。參考:msdn
原文鏈接: Mohammed Hameed 翻譯: 伯樂(lè)在線(xiàn) - 伯樂(lè)在線(xiàn)讀者