架構(gòu)師應(yīng)該遵守的設(shè)計(jì)原則


目錄

KISS(Keep It Simple Stupid) DRY(Don’t Repeat Yourself) YAGNI – You ain’t gonna need it Code For The Maintainer Be as lazy as possible. Programming is only the road, not the way. If you are in a hurry, stroll along slowly. If you really are in a hurry, make a detour. Know your path, Neo. If it wasn’t tested, it is broken. 與程序溝通時(shí)分辨原因和結(jié)果,與人交流時(shí)要分辨事實(shí)和觀點(diǎn)

KISS(Keep It Simple Stupid)


Don’t Make Me Think:如果一段程序?qū)τ陂喿x者來(lái)說(shuō)需要花費(fèi)太多的努力才能理解,那它很可能需要進(jìn)一步簡(jiǎn)化。 最少意外原則:程序代碼應(yīng)盡可能的不要讓閱讀者感到意外。也就是說(shuō)應(yīng)該遵循編碼規(guī)范和常見(jiàn)習(xí)慣,按照公認(rèn)的習(xí)慣方式進(jìn)行組織和命名,不符常規(guī)的編程動(dòng)作應(yīng)該盡可能的避免。
要謙虛,不要認(rèn)為自己是個(gè)天才,這是你第一個(gè)誤解。只有謙虛了,你才能真正達(dá)到超級(jí)天才的水平,即使不行,who cares!你的代碼那么stupid simple,所以你不需要是個(gè)天才! 將你的任務(wù)分解為4-12小時(shí)的子任務(wù)。 把你的問(wèn)題拆分成多個(gè)小問(wèn)題。每個(gè)問(wèn)題用一個(gè)或者很少的幾個(gè)類(lèi)來(lái)解決掉。 保持你的方法足夠小,每個(gè)方法永遠(yuǎn)不要超過(guò)30-40行代碼。每個(gè)方法都應(yīng)該只處理一個(gè)小小的問(wèn)題,不要搞太多uses case進(jìn)去。如果你的方法中有多個(gè)分支,嘗試把他們拆分成多個(gè)小的方法。這樣不僅容易閱讀和維護(hù),找bug也更快。慢慢的你將學(xué)會(huì)愛(ài)。 讓你的類(lèi)也小點(diǎn),原則和上面的方法是一樣的。 先解決問(wèn)題,然后開(kāi)始編碼。不要一邊編碼,一邊解決問(wèn)題。這樣做也沒(méi)什么錯(cuò),但你有能力提前把事情切分成多個(gè)小的塊,然后開(kāi)始編碼可能是比較好的。但也請(qǐng)你不要害怕一遍遍重構(gòu)你的代碼。另外行數(shù)還不是為了衡量質(zhì)量的標(biāo)準(zhǔn),只是有個(gè)基本的尺子而已。 不要害怕干掉代碼。重構(gòu)和重做是兩個(gè)非常重要的方面。如果你遵循上面的建議,重寫(xiě)代碼的數(shù)量將會(huì)最小化,如果你不遵循,那么代碼很可能會(huì)被重寫(xiě)。 其他的任何場(chǎng)景,都請(qǐng)你嘗試盡可能的簡(jiǎn)單,simple,這也是最難的一步,但一旦你擁有了它,你再回頭看,就會(huì)說(shuō),之前的事情就是一坨屎。
參考鏈接: Do The Simplest Thing That Could Possibly Work: http://c2.com/xp/DoTheSimplestThingThatCouldPossiblyWork.html
DRY(Don’t Repeat Yourself)
盡可能的減少重復(fù),如代碼重復(fù)、文檔重復(fù)、數(shù)據(jù)重復(fù)、表征重復(fù)、開(kāi)發(fā)人員重復(fù)(相同的功能不能的開(kāi)發(fā)人員的優(yōu)自己的實(shí)現(xiàn)) 不重復(fù)造輪子,能夠使用開(kāi)源的解決方案的情況下沒(méi)有必要再實(shí)現(xiàn)一遍。 重復(fù)的事項(xiàng),盡可能的使用自動(dòng)化程序解決。 不要過(guò)于優(yōu)化,過(guò)度追求DRY,破壞了程序的內(nèi)聚性。
相關(guān)規(guī)則有: 代碼復(fù)用:http://en.wikipedia.org/wiki/Code_reuse

YAGNI – You ain’t gonna need it

更少的代碼維護(hù) 更少的代碼測(cè)試 事情發(fā)生變化時(shí)更少的代碼可重構(gòu) 更多時(shí)間用于更重要的功能 更多時(shí)間用于文檔編制
節(jié)省了編譯/移植的時(shí)間 節(jié)省了測(cè)試運(yùn)行的時(shí)間 生成時(shí)/運(yùn)行時(shí)節(jié)省了資源 不必以某種方式保留的知識(shí)

Code For The Maintainer

參考鏈接:
Code For The Maintainer:http://wiki.c2.com/?CodeForTheMaintainer

Be as lazy as possible.

不要重復(fù)發(fā)明輪子 過(guò)度優(yōu)化是萬(wàn)惡之源
參考鏈接: Do The Simplest Thing That Could Possibly Work: http://c2.com/xp/DoTheSimplestThingThatCouldPossiblyWork.html

Programming is only the road, not the way.


If you are in a hurry, stroll along slowly.
If you really are in a hurry, make a detour.


Know your path, Neo.



If it wasn’t tested, it is broken.


與程序溝通時(shí)分辨原因和結(jié)果,與人交流時(shí)要分辨事實(shí)和觀點(diǎn)

最小化耦合關(guān)系:代碼片段(代碼塊,函數(shù),類(lèi)等)應(yīng)該最小化它對(duì)其它代碼的依賴。這個(gè)目標(biāo)通過(guò)盡可能少的使用共享變量來(lái)實(shí)現(xiàn)。 最大化內(nèi)聚性:具有相似功能的代碼應(yīng)該放在同一個(gè)代碼組件里。 開(kāi)放/封閉原則:程序里的實(shí)體項(xiàng)(類(lèi),模塊,函數(shù)等)應(yīng)該對(duì)擴(kuò)展行為開(kāi)放,對(duì)修改行為關(guān)閉。換句話說(shuō),不要寫(xiě)允許別人修改的類(lèi),應(yīng)該寫(xiě)能讓人們擴(kuò)展的類(lèi)。 單一職責(zé)原則:一個(gè)代碼組件(例如類(lèi)或函數(shù))應(yīng)該只執(zhí)行單一的預(yù)設(shè)的任務(wù)。 隱藏實(shí)現(xiàn)細(xì)節(jié):隱藏實(shí)現(xiàn)細(xì)節(jié)能最小化你在修改程序組件時(shí)產(chǎn)生的對(duì)那些使用這個(gè)組件的其它程序模塊的影響。 笛米特法則(Law of Demeter)— 程序組件應(yīng)該只跟它的直系親屬有關(guān)系(例如繼承類(lèi),內(nèi)包含的對(duì)象,通過(guò)參數(shù)入口傳入的對(duì)象等。)
原文鏈接:What do you consider the 1st principle(s) of programming?
http://programmers.stackexchange.com/questions/91527/what-do-you-consider-the-1st-principles-of-programming參考鏈接:Programming Principles
https://github.com/webpro/programming-principles
有收獲,點(diǎn)個(gè)在看
評(píng)論
圖片
表情


