[轉(zhuǎn)]優(yōu)秀程序設計一十八原則

原文鏈接(English)
譯文鏈接

1.避免重復原則(DRY - Don’t repeat yourself)
編程的最基本原則是避免重復也切。在程序代碼中總會有很多結(jié)構(gòu)體憔购,如循環(huán)钥星、函數(shù)嗡害、類等等辙芍。一旦你重復某個語句或概念型诚,就會很容易形成一個抽象體逢捺。
2.抽象原則(Abstraction Principle )
與DRY原則相關丧没。要記住人弓,程序代碼中每一個重要的功能沼死,只能出現(xiàn)在源代碼的一個位置。
3.簡單原則(Keep It Simple and Stupid )
簡單是軟件設計的目標崔赌,簡單的代碼占用時間少意蛀,漏洞少,并且易于修改健芭。
4.避免創(chuàng)建你不要的代碼 Avoid Creating a YAGNI (You aren’t going to need it)
除非你需要它县钥,否則別創(chuàng)建新功能。
5.盡可能做可運行的最簡單的事(Do the simplest thing that could possibly work
盡可能做可運行的最簡單的事慈迈。在編程中若贮,一定要保持簡單原則。作為一名程序員不斷的反思“如何在工作中做到簡化呢痒留?”這將有助于在設計中保持簡單的路徑谴麦。
6.別讓我思考(Don’t make me think )
這是Steve Krug一本書的標題,同時也和編程有關狭瞎。所編寫的代碼一定要易于讀易于理解细移,這樣別人才會欣賞,也能夠給你提出合理化的建議熊锭。相反弧轧,若是繁雜難解的程序雪侥,其他人總是會避而遠之的。
7.開閉原則(Open/Closed Principle)
你所編寫的軟件實體(類精绎、模塊速缨、函數(shù)等)最好是開源的,這樣別人可以拓展開發(fā)代乃。不過旬牲,對于你的代碼,得限定別人不得修改搁吓。換句話說原茅,別人可以基于你的代碼進行拓展編寫,但卻不能修改你的代碼堕仔。
8.代碼維護(Write Code for the Maintainer)
一個優(yōu)秀的代碼擂橘,應當使本人或是他人在將來都能夠?qū)λ^續(xù)編寫或維護。代碼維護時摩骨,或許本人會比較容易通贞,但對他人卻比較麻煩。因此你寫的代碼要盡可能保證他人能夠容易維護恼五。用書中原話說“如果一個維護者不再繼續(xù)維護你的代碼昌罩,很可能他就有想殺了你的沖動≡致”
9.最小驚訝原則(Principle of least astonishment)
最小驚訝原則通常是在用戶界面方面引用茎用,但同樣適用于編寫的代碼。代碼應該盡可能減少讓讀者驚喜睬罗。也就是說绘搞,你編寫的代碼只需按照項目的要求來編寫。其他華麗的功能就不必了傅物,以免弄巧成拙。
10.單一責任原則(Single Responsibility Principle)
某個代碼的功能琉预,應該保證只有單一的明確的執(zhí)行任務董饰。
11.低耦合原則(Minimize Coupling)
代碼的任何一個部分應該減少對其他區(qū)域代碼的依賴關系。盡量不要使用共享參數(shù)圆米。低耦合往往是完美結(jié)構(gòu)系統(tǒng)和優(yōu)秀設計的標志卒暂。
12.最大限度凝聚原則(Maximize Cohesion)
相似的功能代碼應盡量放在一個部分。
13.隱藏實現(xiàn)細節(jié)(Hide Implementation Details)
隱藏實現(xiàn)細節(jié)原則娄帖,當其他功能部分發(fā)生變化時也祠,能夠盡可能降低對其他組件的影響。
14.迪米特法則又叫作最少知識原則(Law of Demeter)
該代碼只和與其有直接關系的部分連接近速。(比如:該部分繼承的類诈嘿,包含的對象堪旧,參數(shù)傳遞的對象等)。
15.避免過早優(yōu)化(Avoid Premature Optimization)
除非你的代碼運行的比你想像中的要慢奖亚,否則別去優(yōu)化淳梦。假如你真的想優(yōu)化,就必須先想好如何用數(shù)據(jù)證明昔字,它的速度變快了爆袍。
“過早的優(yōu)化是一切罪惡的根源”——Donald Knuth
16.代碼重用原則(Code Reuse is Good)
重用代碼能提高代碼的可讀性,縮短開發(fā)時間作郭。
17.關注點分離(Separation of Concerns)
不同領域的功能陨囊,應該由不同的代碼和最小重迭的模塊組成。
18.擁抱改變(Embrace Change)
這是Kent Beck一本書的標題夹攒,同時也被認為是極限編程和敏捷方法的宗旨蜘醋。
許多其他原則都是基于這個概念的,即你應該積極面對變化芹助。事實上堂湖,一些較老的編程原則如最小化耦合原則都是為了使代碼能夠容易變化。無論你是否是個極限編程者状土,基于這個原則去編寫代碼會讓你的工作變得更有意義无蜂。
作者簡介:Christopher Diggins是加拿大一位有25年編程經(jīng)驗的資深技術人員,曾效力于Microsoft和Autodesk蒙谓,并創(chuàng)辦過兩家贏利的互聯(lián)網(wǎng)公司斥季。
他是《C++ Cookbook》的作者之一,并自己編寫了一門編程語言Heron累驮。

最后編輯于
?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末酣倾,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子谤专,更是在濱河造成了極大的恐慌躁锡,老刑警劉巖,帶你破解...
    沈念sama閱讀 222,865評論 6 518
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件置侍,死亡現(xiàn)場離奇詭異映之,居然都是意外死亡,警方通過查閱死者的電腦和手機蜡坊,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,296評論 3 399
  • 文/潘曉璐 我一進店門杠输,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人秕衙,你說我怎么就攤上這事蠢甲。” “怎么了据忘?”我有些...
    開封第一講書人閱讀 169,631評論 0 364
  • 文/不壞的土叔 我叫張陵鹦牛,是天一觀的道長搞糕。 經(jīng)常有香客問我,道長能岩,這世上最難降的妖魔是什么寞宫? 我笑而不...
    開封第一講書人閱讀 60,199評論 1 300
  • 正文 為了忘掉前任,我火速辦了婚禮拉鹃,結(jié)果婚禮上辈赋,老公的妹妹穿的比我還像新娘。我一直安慰自己膏燕,他們只是感情好钥屈,可當我...
    茶點故事閱讀 69,196評論 6 398
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著坝辫,像睡著了一般篷就。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上近忙,一...
    開封第一講書人閱讀 52,793評論 1 314
  • 那天竭业,我揣著相機與錄音,去河邊找鬼及舍。 笑死未辆,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的锯玛。 我是一名探鬼主播咐柜,決...
    沈念sama閱讀 41,221評論 3 423
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼攘残!你這毒婦竟也來了拙友?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 40,174評論 0 277
  • 序言:老撾萬榮一對情侶失蹤歼郭,失蹤者是張志新(化名)和其女友劉穎遗契,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體病曾,經(jīng)...
    沈念sama閱讀 46,699評論 1 320
  • 正文 獨居荒郊野嶺守林人離奇死亡姊途,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,770評論 3 343
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了知态。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,918評論 1 353
  • 序言:一個原本活蹦亂跳的男人離奇死亡立叛,死狀恐怖负敏,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情秘蛇,我是刑警寧澤其做,帶...
    沈念sama閱讀 36,573評論 5 351
  • 正文 年R本政府宣布顶考,位于F島的核電站,受9級特大地震影響妖泄,放射性物質(zhì)發(fā)生泄漏驹沿。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 42,255評論 3 336
  • 文/蒙蒙 一蹈胡、第九天 我趴在偏房一處隱蔽的房頂上張望渊季。 院中可真熱鬧,春花似錦罚渐、人聲如沸却汉。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,749評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽合砂。三九已至,卻和暖如春源织,著一層夾襖步出監(jiān)牢的瞬間翩伪,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,862評論 1 274
  • 我被黑心中介騙來泰國打工谈息, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留缘屹,地道東北人。 一個月前我還...
    沈念sama閱讀 49,364評論 3 379
  • 正文 我出身青樓黎茎,卻偏偏與公主長得像囊颅,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子傅瞻,可洞房花燭夜當晚...
    茶點故事閱讀 45,926評論 2 361

推薦閱讀更多精彩內(nèi)容

  • 摘要:良好的編程原則與良好的設計工程原則密切相關踢代。本文總結(jié)的這些設計原則,幫助開發(fā)者更有效率的編寫代碼嗅骄,并幫助成為...
    Java高級架構(gòu)獅閱讀 991評論 0 0
  • 面向?qū)ο蟪绦蛟O計特點:封裝胳挎、繼承和多態(tài)設計原則、模式不產(chǎn)生代碼溺森,只是代碼邏輯上的一種規(guī)范慕爬。 1.SOLID 一、單...
    long弟弟閱讀 127評論 0 0
  • 單一職責原則 所謂職責是指類變化的原因屏积。如果一個類有多于一個的動機被改變医窿,那么這個類就具有多于一個的職責。而單一職...
    Liuzjdev閱讀 871評論 0 0
  • 程序設計的6大原則: 單一職責原則里氏替換原則依賴倒置原則接口隔離原則迪米特法則開閉原則 從根本學好炊林,理解為什么要...
    silencefun閱讀 2,414評論 1 4
  • 今天面試被問到程序設計的六大原則姥卢,一臉懵逼,什么程序設計六大原則,程序設計還有原則独榴,還六大下面這篇文章介紹的挺全僧叉,...
    張_何閱讀 436評論 0 0