编写好代码的10条戒律
1.DRY:不要重復(fù)你自己(Don’t repeat yourself)
DRY是一條最容易理解但又是相對比較難以應(yīng)用的原則。它是指當(dāng)你在兩處或者更多的地方發(fā)現(xiàn)相似代碼時,我們應(yīng)當(dāng)把它們抽象成一個新的函數(shù),在之前重復(fù)的地方調(diào)用新的函數(shù)并帶上適當(dāng)?shù)膮?shù)。
DRY也許是最普遍的一條編程原則,我從未發(fā)現(xiàn)一個開發(fā)人員認為編寫重復(fù)的代碼是件好事。但是我發(fā)現(xiàn)一些開發(fā)人員在編寫單元測試時忘記了這條原則,例如:設(shè)想一下你改變了一個類的接口,之前已經(jīng)為這個類編寫了很多的單元測試,如果你沒有應(yīng)用DRY原則,這時你需要手動去修改所有使用這個類接口的調(diào)用,來與每一個測試實例的新簽名匹配。
2.編寫短小的函數(shù)/方法
有三個非常好的理由,選擇編寫短小的函數(shù)。
1.代碼會更容易閱讀。
2.代碼會更容易重用(短小的函數(shù)更容易產(chǎn)生松耦合)。
3.代碼會更易于測試。
編者注:松耦合:在軟件領(lǐng)域中,“耦合”一般指軟件組件之間的依賴程度。耦合度松的軟件會有較好的擴展性。
3.給類、函數(shù)和變量使用好的命名
直接使用其他開發(fā)者的代碼而不需要閱讀說明文檔,沒有什么比這更好的事情了,因為代碼中的類名、函數(shù)名已經(jīng)能夠告訴我們所有需要的信息。所以,采用這種方法,每次在為你的代碼中任何元素進行命名的之前請花上幾秒鐘(思考),這會讓大家的生活變得更輕松。
4.為每個類分配正確的職責(zé)
一個類只承擔(dān)一個職責(zé)(單一權(quán)責(zé)),聽起來和有些人知道的SOLID原則很相似,但是這里不是指任意的職責(zé),而是正確的職責(zé)。所以,如果我們要設(shè)計一個顧客類,我們不會給它創(chuàng)建一個銷售的行為,我們只會讓它處理所有與一個客戶相關(guān)的數(shù)據(jù)。
編者注:SOLID:面向?qū)ο笤O(shè)計的五項原則(是SRP單一職責(zé)原則、OCP開閉原則、LSP李式代換原則、ISP依賴反轉(zhuǎn)原則和 DIP接口分離原則,首字符的縮寫)。
5.保持代碼的條理性
代碼條理性分兩個層次
物理上的條理性:無論你采用了哪種結(jié)構(gòu),包、命名空間、文件夾等等,用一種更容易并且憑直覺就能找到代碼存放在哪里的方式來組織你編寫的類。
邏輯上的條理性:不論邏輯上從屬關(guān)系如何,(只要有邏輯從屬關(guān)系)類都應(yīng)該能夠互相訪問彼此的成員變量,但是如果從屬于不同的邏輯結(jié)構(gòu)就應(yīng)當(dāng)只能通過接口來訪問。這種邏輯分組通常會被實現(xiàn)成(邏輯)層、服務(wù)等。
6.編寫很多的單元測試
測試越多越好,它們是所有代碼變動的安全保證,我們會在將來的某一天需要運行這些測試代碼。
7.盡早且經(jīng)常地重構(gòu)代碼(Refactor often and sooner)
軟件開發(fā)是一個持續(xù)發(fā)現(xiàn)的過程,為了編寫保持與新增/改變的需求匹配的高質(zhì)量代碼,隨著開發(fā)的進行,重構(gòu)代碼是必不可少的。由于重構(gòu)是一項帶有風(fēng)險的任務(wù),需要有兩個主要的前提條件,來避免由于重構(gòu)給系統(tǒng)引入新的錯誤。
1.編寫很多的單元測試
2.每一次重構(gòu)的幅度要比較小。在開發(fā)軟件過程中,開始重構(gòu)2000行代碼,3個小時以后發(fā)現(xiàn)所有的代碼都不能工作,并且導(dǎo)致問題的原因無從查找,因此需要恢復(fù)到最初版本,幾乎沒什么事能比這更讓人抓狂了。
8.注釋是惡魔
這條特殊戒律有一點爭議,我們大多數(shù)人學(xué)到的是“注釋是一個好的習(xí)慣”,并且在一段晦澀的代碼中有一段注釋會比僅僅只有代碼好的多,這里我的觀點是:給晦澀的代碼加注釋還不如僅僅留下代碼,只需要重構(gòu)這段代碼直到它變得可讀為止。(編注:當(dāng)然了,除了作者說的這種類型的代碼,在其他情況下,還是得添加必要的注釋,這不僅方便自己日后查看,更有利于后來者維護,請參閱《提高代碼可讀性的10個注釋技巧?》一文。
9.要面向接口編程,不要面向?qū)崿F(xiàn)編程(Code to an interface, not to an implementation)
這是一條經(jīng)典的原則,面向接口編程會讓我們從實現(xiàn)的細節(jié)中解放出來,我們只要定義一個協(xié)議,并且依據(jù)協(xié)議調(diào)用定義的操作,期望(對方,即被調(diào)用的代碼)能把實際的實現(xiàn)或者運行時態(tài)的實現(xiàn)傳遞給我們的代碼。
10.對代碼進行復(fù)查
我們都會犯錯誤,沒有什么能比請別人對我們代碼做一個非正式快速復(fù)查更好的辦法來查找錯誤了。最好不要等到代碼都完成以后再復(fù)查,當(dāng)某些重要部分的代碼完成后,或者離上一次復(fù)查相隔幾天之后,就進行復(fù)查。
總結(jié)
以上是生活随笔為你收集整理的编写好代码的10条戒律的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 在活动完成之后的格式工厂下载
- 下一篇: 飞鸽传书官方网站方式hook一些常见的枚