這個(gè)系列希望寫一些正兒八經(jīng)的架構(gòu)設(shè)計(jì)之外的,屬于架構(gòu)師職責(zé)的雜七雜八的事情。
制定項(xiàng)目的代碼規(guī)范也是架構(gòu)師的雜事之一,下面記一些制定規(guī)范的規(guī)范,Standar of Coding Standars。
1.規(guī)范的內(nèi)容
a.Standars在老外口中可以細(xì)化為Conventions、Rules、Guidelines和Best Practices,身為一份有價(jià)值的規(guī)范,除了定義最簡(jiǎn)單的格式、命名規(guī)則外,更要包含足夠份量的禁條、指南和最佳實(shí)踐。
b.規(guī)范必須是經(jīng)實(shí)踐的廣泛共識(shí)的標(biāo)準(zhǔn),不是完美主義者憑空發(fā)明,認(rèn)為這樣子會(huì)更好的條款。
c.條款必須有被描述的價(jià)值,沒(méi)人會(huì)做的蠢事就不用再列了(比如編譯器已經(jīng)強(qiáng)制檢查的,或者濫用goto語(yǔ)句這樣的條款)
d.條款可以分成必須遵循(I)、推薦遵循(II)與可選建議(III)幾個(gè)等級(jí)。
e.團(tuán)員意見一致的規(guī)范比完美的規(guī)范更重要。
2.第0條規(guī)范---不要拘泥于細(xì)節(jié),個(gè)人喜好與過(guò)時(shí)的東西不應(yīng)該被標(biāo)準(zhǔn)化
----來(lái)自《C++ Coding Standards中文版》,很重要的條款。
有些東西只是個(gè)人喜好與信仰問(wèn)題(MS vs Unix),并不影響程序的正確性可讀性,比如,花括號(hào)的位置,縮進(jìn),空格與縮進(jìn)符,行的長(zhǎng)度,只需要規(guī)定在一個(gè)文件、一個(gè)模塊中必須一致就可以了。
具體使用哪種風(fēng)格其實(shí)并不影響可讀性,不值得花太多的時(shí)間來(lái)爭(zhēng)論,規(guī)范中更有價(jià)值的是格式以外的部分,比如How處理異常,How寫log等。何況現(xiàn)代IDE一下就能轉(zhuǎn)換格式。但若是閱讀同一段代碼時(shí)要在幾種風(fēng)格中切換就有點(diǎn)難受。
過(guò)多過(guò)細(xì)的命名規(guī)定也不值得,而匈牙利記法,單入口單出口條例在書中被認(rèn)為過(guò)時(shí)。
3.以別人的規(guī)范作基礎(chǔ)
a. C++
- C++ Coding Standard 很多公司使用的規(guī)范,2007.1更新。
- 《C++ Coding Standards中文版》Herb Sutter(Exceptional C++作者),與Andrei Alexandrescu(Modern C++ Design作者)兩大鬼才的返璞歸真之作。
b. Java
- Code Conventions for the Java Programming Language,
How to Write Doc Comments for the Javadoc tool by Sun Microsystems, Inc. - Draft Java Coding Standard, by Doug Lea (Java并發(fā)編程教父)
- Coding Standards for Java, by Scott W. Ambler (著名書商,2007.1更新)
- SpringSide Coding Standard by 白衣
c. Other
- Google Directory 和 Open Directory 上,每種語(yǔ)言都可能收集有Coding Standard/Styles。
- RUP的文檔中也有C++與Java Programing Guidline Examples。
4. Code Review
善用自動(dòng)review的工具如Eclipse與 Inellij IDEA的代碼校驗(yàn)功能和Checkstyle、PMD 這些靜態(tài)代碼分析工具。
5.參考資料:
《The Art of Agile Development》Coding Standards一章
Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=1567553